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是唯一的
- Set
key-value结构,与
List
很相似,value
也是个数组,里面存储的值不能重复,但无序
- Sorted set
key-value结构,但是
value
是个数组,里面存储的值是score-value-rank结构,rank是隐藏值(由redis自动维护),value是唯一的,只可以修改score
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 操作系统决定何时同步