一,软件准备
#redis wget http://download.redis.io/releases/redis-3.0.7.tar.gz #phpredis 非php7使用 下载后文件名为:phpredis-develop wget https://codeload.github.com/phpredis/phpredis/zip/develop #phpredis PHP7专属 下载后文件名为:phpredis-php7 wget https://codeload.github.com/phpredis/phpredis/zip/php7
安装phpredis前,务必已经安装好autoconf。
二,安装配置Redis
安装方法非常简单,make后,redis直接安装在当前目录:
tar xzf redis-3.0.7.tar.gz cd redis-3.0.7 make
开启redis前台服务测试:
src/redis-server
显示这个小盒子,前台服务即为成功开启,占用端口6379:
_._ _.-``__ ‘‘-._ _.-`` `. `_. ‘‘-._ Redis 3.0.7 (00000000/0) 64 bit .-`` .-```. ```\/ _.,_ ‘‘-._ ( ‘ , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|‘` _.-‘| Port: 6379 | `-._ `._ / _.-‘ | PID: 23909 `-._ `-._ `-./ _.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | http://redis.io `-._ `-._`-.__.-‘_.-‘ _.-‘ |`-._`-._ `-.__.-‘ _.-‘_.-‘| | `-._`-._ _.-‘_.-‘ | `-._ `-._`-.__.-‘_.-‘ _.-‘ `-._ `-.__.-‘ _.-‘ `-._ _.-‘ `-.__.-‘
按Ctrl+C退出redis前台服务。
配置redis使用环境:
现在,我们新建目录 /usr/local/redis ,把./redis.conf,src/redis-server,src/redis-cli 三个文件复制到该目录下
mkdir /usr/local/redis cp redis.conf src/redis-server src/redis-cli /usr/local/redis/cd /usr/local/redis
这三个文件:
redis.conf redis配置文件
redis-server redis服务端
redis-cli redis客户端
vi redis.conf修改配置,使redis服务在后台运行:
#redis.conf#daemonize yes
保存退出,./redis-server redis.conf 开启redis后台服务。
如果你修改redis.conf中的任何配置,需要关闭redis-server进程后,再./redis-server redis.conf 重新开启redis后台服务。
./redis-cli 开启redis客户端,你可以在其中输入任意redis命令。
Redis数据库
存入redis数据前必须选择数据库,redis数据库默认16个,下标0~15,默认使用第0个,存放数据前可以使用select N选择数据库。
Redis数据库在redis.conf中配置如下:
#redis.conf# databases 16
你可以根据实际需要更改数据库个数,但一般不建议修改。
*持久化功能
redis(nosql产品)为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。
数据保存到硬盘的过程就称为“持久化”效果。
Redis快照持久化(snap shotting或称RDB持久化)配置:
该持久化默认开启,一次性把redis中全部的数据保存一份存储在硬盘中,如果数据非常多(10-20G)就不适合频繁进行该持久化操作。快照持久化会根据配置条件定期生成二进制备份文件,默认文件名dump.rdb。
redis.conf 中关于快照的配置:
#快照写入文件名 dbfilename dump.rdb #快照保存目录 dir ./ #快照写入频率 save 900 1 #900 秒内如果超过 1 个 key 被修改,则发起快照保存 save 300 10 #300秒超过10个key被修改,发起快照 save 60 10000 #60秒超过10000个key被修改,发起快照 #以上三个备份频率需要同时存在: #数据变化非常快的时候,就快点做备份(保证数据安全) #数据变化慢的时候,就慢点做备份(节省服务器资源)
手动发起快照持久化:
快照持久化默认开启,并定时执行,你也可以通过redis-cli客户端使用bgsave命令手动发起。
./redis-cli bgsave
Redis AOF(append only file)持久化配置:
本质:把用户执行的每个“写”指令(添加、修改、删除)都备份到文件中,还原数据的时候就是执行具体写指令而已。
AOF默认关闭,默认保存文件名append.aof,默认每秒执行一次,具体参数如下
#开启/关闭AOF appendonly yes #保存文件名 appendfilename "appendonly.aof" #AOF保存频率 # appendfsync always #每次收到写命令就立即强制写入磁盘,最慢的,但是保证完全的持久化,不推荐使用 appendfsync everysec #每秒钟强制写入磁盘一次,在性能和持久化方面做了很好的折中,推荐 # appendfsync no #完全依赖 os,性能最好,持久化没保证 #上面三种选项数据安全性及服务性能情况 #数据最安全 服务器性能低 #数据较安全 服务器性能中等 #数据不安全 服务器性能高(优良)
AOF策略设置为always或者everysec时,后台处理进程(后台保存或者AOF日志重写)会执行大量的I/O操作,在某些Linux配置中会阻止过长的fsync()请求。注意现在没有任何修复,即使fsync在另外一个线程进行处理。
为了减缓这个问题,可以设置下面这个参数no-appendfsync-on-rewrite:
#redis.conf# no-appendfsync-on-rewrite yes
为AOF备份文件做优化压缩处理:
AOF记录用户的每个操作,但是有些操作例如对某个key的多个同类型操作是可以合并为一个,从而做到压缩文件大小的效果。例如多次incr一个整型key,可以直接合并为set key N。
压缩优化(AOF重写)命令:
./redis-cli bgrewriteaof
AOF自动重写:
当AOF文件增长到一定大小的时候Redis能够调用 BGREWRITEAOF 对日志文件进行重写,它是这样工作的:Redis会记住上次进行些日志后文件的大小(如果从开机以来还没进行过重写,那日子大小在开机的时候确定)基础大小会同现在的大小进行比较。如果现在的大小比基础大小大制定的百分比,重写功能将启动,同时需要指定一个最小大小用于AOF重写,这个用于阻止即使文件很小但是增长幅度很大也去重写AOF文件的情况,设置 percentage 为0就关闭这个重写特性。
#redis.conf# auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
手动持久化相关指令:
save (客户端命令行内)前台备份数据(快照保存)bgsave 异步保存数据到磁盘(快照保存) lastsave 返回上次成功保存到磁盘的unix时间戳 shutdown 同步保存到服务器并关闭redis服务器 bgrewriteaof 当日志文件过长时优化AOF日志文件存储
redis 127.0.0.1:6379> SAVE #前台备份数据
./redis-cli bgrewriteaof ./redis-cli bgsave ./redis-cli -h 127.0.0.1 -p 6379 bgsave #手动发起快照
数据恢复
如果需要恢复数据,只需将备份文件 (dump.rdb) 移动到 redis 快照保存目录 并启动服务即可。要查看快照保存目录,可以查看redis.conf的dir配置。
*Redis主从模式
为了降低每个redis服务器的负载,可以多设置几个,并做主从模式,一个服务器负载“写”(添加、修改、删除)数据,其他服务器负载“读”数据,主服务器数据会“自动”同步给从服务器
Redis主从复制特点
1.master可以有多个slave
2.除了多个slave连接到master外,slave也可以连接到其他slave,形成网状结构
3.可以让slave做读请求,master做写操作
配置主服务器:
(假定局域网IP为192.168.1.101)
#redis.conf# #配置主服务器密码 requirepass admin123 #自定义端口 port 6379
配置从服务器:
#redis.conf# #主服务器连接密码masterauth admin123 #自定义端口port 6380 #设置成为192.168.1.101的从服务器 slaveof 192.168.1.101 6379 #取消从服务器只读 slave-read-only no
重新开启redis-server 服务,则从服务器设置成功。
Redis推荐部署方式:
*关于Redis详细配置信息,可以参考以下博客:
三,安装PHP扩展
生成redis.so:
unzip phpredis-Version cd phpredis-Version /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install
将extension=redis.so加入到php.ini
重启服务器,查看phpinfo();
如果是使用php-fpm,则需要重启php-fpm:
ps aux|grep php-fpm #查看fpm进程号 kill -USR2 fpm进程号 #平滑重启php-fpm
phpinfo():
显示即OK。
四,测试使用
新建test_redis.php
1 <?php 2 3 //连接本地Redis服务 4 $redis=new Redis(); 5 $redis->connect(‘localhost‘,‘6379‘); 6 //查看服务是否运行 7 $redis->ping(); 8 9 //选择数据库 10 $redis->select(5); 11 12 //设置数据 13 $redis->set(‘school‘,‘WuRuan‘); 14 //设置多个数据 15 $redis->mset(array(‘name‘=>‘jack‘,‘age‘=>24,‘height‘=>‘1.78‘)); 16 17 //存储数据到列表中 18 $redis->lpush("tutorial-list", "Redis"); 19 $redis->lpush("tutorial-list", "Mongodb"); 20 $redis->lpush("tutorial-list", "Mysql"); 21 22 //获取存储数据并输出 23 echo $redis->get(‘school‘); 24 25 echo ‘<br/>‘; 26 27 $gets=$redis->mget(array(‘name‘,‘age‘,‘height‘)); 28 print_r($gets); 29 30 $tl=$redis->lrange("tutorial-list", 0 ,5); 31 print_r($tl);
显示:
*语法参考文档,phpredis中文手册
五(附),Redis性能测试及常用命令
Redis性能测试
Redis还自带一个redis-benchmark性能测试工具,我们将其复制到/usr/local/redis目录下
cp /usr/local/src/redis-3.0.7/src/redis-benchmark /usr/local/redis/
redis-benchmark操作命令如下:
redis-benchmark [option] [option value]
redis 性能测试工具可选参数如下所示:
实例
1,我们同时执行10000个请求来检测redis性能:
./redis-benchmark -n 10000 ====== PING_INLINE ====== 10000 requests completed in 0.31 seconds 50 parallel clients 3 bytes payload keep alive: 1 74.11% <= 1 milliseconds 95.93% <= 2 milliseconds 98.82% <= 3 milliseconds 99.30% <= 6 milliseconds 99.33% <= 7 milliseconds 99.40% <= 9 milliseconds 99.45% <= 10 milliseconds 99.51% <= 13 milliseconds 99.60% <= 14 milliseconds 99.64% <= 18 milliseconds 99.82% <= 29 milliseconds 100.00% <= 29 milliseconds 31746.03 requests per secon ....更多显示参数不列举
2,使用了多个参数来测试 redis 性能:
#以下实例中主机为 127.0.0.1,端口号为 6379,执行的命令为 set,lpush,请求数为 10000,通过 -q 参数让结果只显示每秒执行的请求数。 ./redis-benchmark -h 127.0.0.1 -p 6379 -t set,lpush -n 10000 -q SET: 38314.18 requests per second LPUSH: 36363.64 requests per second
Redis常用命令
*出自传播智客
*Redis教程:http://www.runoob.com/redis/redis-tutorial.html,http://www.jb51.net/article/56448.htm