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 操作系统决定何时同步
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。