redis Q&A

redis 是什么?

  • 基于内存
  • 有客户端和服务器端
  • NoSQL非关系型数据库

redis 应用场景是什么?

  • 缓存
  • 队列
  • 数据持久存储

redis 如何安装?如何启动?如何关闭?客户端如何启动?

  • 下载、解压、编译、安装

wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xzvf redis-4.0.1.tar.gz
cd redis-4.0.1
make
cd src
make install PREFIX=/usr/local/redis

  • redis 服务启动

cd /usr/local/redis/bin
./redis-server
注意这种方式启动redis 使用的是默认配置

通过启动参数告诉redis使用指定配置文件使用下面命令启动
./redis-server redis.conf

  • redis 服务关闭

cd /usr/local/redis/bin
./redis-cli shutdown
./redis-cli -h 127.0.0.1 -p 6379 shutdown #指定端口和主机

  • redis 客户端启动

cd /usr/local/redis/bin
./redis-cli
退出客户端 : quit

如何创建一个Shell脚本来管理redis服务?如何让redis服务能自启动?

  • 创建Shell脚本开启、关闭、重启redis服务
REDIS_SERVER="/usr/local/redis/bin/redis-server"
REDIS_CONF="/usr/local/redis/etc/redis.conf"
REDIS_CLIENT="/usr/local/redis/bin/redis-cli"

start()
{
  $REDIS_SERVER $REDIS_CONF
}

stop()
{
  $REDIS_CLIENT shutdown
}

restart()
{
  stop
  start
}

case "$1" in
  'start')
     start;;
  'stop')
     stop;;
  'restart')
     restart;;
  *)
     echo 'nothing to do';;
esac
  • 添加服务作为自启动

如何调整 redis.conf 配置?

  • 设置为后台启动: daemonize yes

五种常用数据结构

  • String

key-value结构,key是字符串,value可存储 字符串整数浮点数

  • List

key-value结构,但是value是个数组,里面存储的值可以重复,但有序

  • Hash

key-value结构,但是value是个数组,里面存储的值也是key-value结构,key是唯一的

《redis Q&A》

  • Set

key-value结构,与List很相似,value也是个数组,里面存储的值不能重复,但无序

  • Sorted set

key-value结构,但是value是个数组,里面存储的值是score-value-rank结构,rank是隐藏值(由redis自动维护),value是唯一的,只可以修改score

《redis Q&A》

PHP如何安装redis扩展?

  • 下载 phpredis 插件

wget https://codeload.github.com/phpredis/phpredis/tar.gz/3.1.4

  • 使用phpize工具生成configure文件

php安装目录/bin/phpize

  • 生成Makefile文件

./configure --with-php-config=/usr/local/php/bin/php-config

  • 编译并安装

make && make install

  • php.ini中加载redis.so文件

extension = redis.so

使用 phpredis 扩展如何操作 redis ?

注意phpredis的类都是在根命名空间下,所以使用phpredis类时,尽量在开头加/

  • 连接
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
  • 操作String
$redis -> set('key1', 'val1');
$val = $redis -> get('key1'); // 'val1'
$redis -> set('key1', 12);
$redis -> incr('key1', 2);
$val = $redis -> get('key1'); // '14'
  • 操作List
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('list1');

$redis -> lPush('list1', 'a');
$redis -> lPush('list1', 'b');
$redis -> lPush('list1', 'c');

$val = $redis -> rPop('list1');
  • 操作Set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('set1');

$redis -> sAdd('set1', 'a');
$redis -> sAdd('set1', 'b');
$redis -> sAdd('set1', 'c');
$redis -> sAdd('set1', 'c');

$len = $redis -> sCard('set1');
var_dump($len);  //int(3)

$arr = $redis -> sMembers('set1');
var_dump($arr); //无序的索引数组
  • 操作Hash
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('person1');

$redis -> hSet('person1', 'name', 'mingming');
$redis -> hSet('person1', 'age', 42);
$redis -> hSet('person1', 'gender', 1);

$name = $redis -> hGet('person1', 'name');
var_dump($name);  //string(8) 'mingming'

$arr = $redis -> hMGet('person1', array('name','age'));
var_dump($arr);  //关联数组
  • 操作sort set
$redis = new \Redis();
$redis -> connect('127.0.0.1', 6379);
$redis -> delete('zset1');

$redis -> zAdd('zset1', 100, 'mingming');
$redis -> zAdd('zset1', 90, 'xiaohong');
$redis -> zAdd('zset1', 98, 'xiaoming');

$val = $redis -> zRange('zset1', 0, -1);  //低到高
$val = $redis -> zRevRange('zset1', 0, -1);  //高到低
##输出的$val是索引数组

redis 数据持久化

由于redis是基于内存来存储数据的,所以redis一旦重启或者系统崩溃,内存中的数据就会丢失,为了保证数据安全,所以需要把数据持久化存储到硬盘
如果仅仅当做缓存来使用,可以禁用redis持久化功能

  • redis提供两种持久化方法
1、快照持久化(默认开启,无需配置):数据安全性低,性能好
2、AOF持久化(需要配置):数据安全性高,性能差
  • 快照持久化适用场景

只使用于那些即使丢失一部分数据也不会造成问题的应用程序

  • AOF持久化适用场景

用于对数据安全性要求高的应用程序

  • AOF持久化三种同步策略
appendfsync always 每次写操作就进行同步(安全性最高)
appendfsync everysec 每秒执行一次同步(推荐)
appendfsync no 操作系统决定何时同步
    原文作者:104828720
    原文地址: https://segmentfault.com/a/1190000010482555
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞