0.写在前面
请务必养成使用redis服务器加密的习惯,在下面操作中使用密码
1.安装与使用
redis官网:https://redis.io/
5.0.6.稳定版:http://download.redis.io/releases/redis-5.0.6.tar.gz
# cd /software
# wget http://download.redis.io/releases/redis-5.0.6.tar.gz
# tar xvf redis-5.0.6.tar.gz
# cd redis-5.0.6
# make PREFIX=/usr/local/redis install
# mv /software/redis-5.0.6/redis.conf /usr/local/redis/
# vim /usr/local/redis/redis.conf
改三行,或自定义
daemonize yes 后台运行
bind 0.0.0.0 准许所有人访问
protected-mode no 取消保护
如果需要密码(自定义)
requirepass 密码
# 开启服务
# /usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
# ss -nltp
# 开启客户端
# /usr/local/redis/bin/redis-cli -h redis服务器IP
# 进入客户端后,若有密码,先执行
# auth 密码
2.如何操作与使用
手动备份
save 同步
bgsave 异步
3.备份,rdb,aof
rdb是备份数据,aof是备份行为。
# vim /usr/local/redis/redis.conf
rdb默认开启
格式:save 秒 操作次数
save 900 1 => 15分钟内最少有1个key改变
save 300 10 => 5分钟内最少有10个key改变
save 60 10000 => 1分钟内最少有10000个key改变
rdb最后一次备份后的数据可能会丢失
rdb会生成一个*.rdb文件,用定时任务,复制这个文件去备份端。
[SNAPSHOTTING]
stop-writes-on-bgsave-error yes 生成快照时错误就停止写
rdbcompression yes 是否压缩
rdbchecksum yes 是否数据校验
dbfilename dump.rdb 备份文件名
dir ./ 存放目录
aof默认不开启
appendonly yes
# appendfsync always => 操作一次,备份一次
# appendfsync everysec => 推荐使用,每1s备份一次
# appendfsync no => 不备份
[appendonly]
appendonly no 是否开启
appendfilename "appendonly.aof" aof文件名
appendfsync everysec 保存模式
no-appendfsync-on-rewrite no 进行rewrite时,是否要继续备份,no就是同步,yes异步
auto-aof-rewrite-percentage 100 自动重写时机,与上次比较增长100%后切割文件。
auto-aof-rewrite-min-size 64mb 64mb之后就切割
aof-load-truncated yes yes会忽略最后一条可能存在问题的指令,no不管会不会错,就恢复
aof-use-rdb-preamble yes redis4.0开始允许使用RDB-AOF混合持久化
区别:rdb更粗糙,更便捷,会丢失数据
aof更细致,更缓慢,大概率不丢数据。
3.主从复制
1.在从机客户端中输入
例:replicaof/slaveof 主机IP 主机端口
> replicaof 10.1.1.28 6379
或
> slaveof 10.1.1.28 6379
这是临时的从机设置方法。如果需要永久设置,需要修改配置文件。
2.自动配置主从要修改配置文件
vim /usr/local/redis/redis.conf
[REPLICATION]
replicaof 10.1.1.28 6379
或
slaveof 10.1.1.28 6379
masterauth <master-password> 如果主机端配置文件设置有密码
插:{
主机密码在哪设置。
修改主机配置文件
vim /usr/local/redis/redis.conf
masterauth 123
}
默认从机不可写,可进行读写分离
slave-read-only yes
3.查看
> info
role:slave
master_host:10.1.1.28
master_port:6379
master_link_status:up
显示up则成功。
4.哨兵模式
哨兵模式就是redis挂了,从机之间争抢master的功能。
# 所有机器一起操作
# redis安装文件夹里有个sentinel.conf,移动它
# cp /software/redis-5.0.6/sentinel.conf /usr/local/redis/
# 配置master的sentinel.conf
# vim /usr/local/redis/sentinel.conf
bind 0.0.0.0
protected-mode no
sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor 名字 IP 端口 票数
<quorum>是一个数字,指明当有多少个sentinel认为一个master失效时,master才算真正失效。
sentinel monitor myredis 10.1.1.28 6379 2
如果有密码再补一句
sentinel auth-pass <master-name> <password>
修改保存。
所有机器一起启动服务
# /usr/local/redis/bin/redis-sentinel /usr/local/redis/sentinel.conf
自行关闭主机的redis-server服务,进行验证。
5.集群
至少需要6个redis实例,三主三从。
可以用一台机器模拟,主要 IP:端口号 不重复就行。
# 六个实例需要六个配置文件。
# touch /usr/local/redis/700{1..6}.conf
集群配置文件精简后仅需要以下几行
port 7001 #端口
cluster-enabled yes #启用集群模式
cluster-config-file nodes_7001.conf
cluster-node-timeout 5000 #超时时间
appendonly yes
daemonize yes #后台运行
protected-mode no #非保护模式
pidfile /var/run/redis_7001.pid
仅写这几行也行,保留原文仅改这几行也行。
7001-7006就修改配置文件中的7001三处即可。
然后需要开启6个redis
# /usr/local/redis/bin/redis-server /usr/local/redis/7001.conf
# /usr/local/redis/bin/redis-server /usr/local/redis/7002.conf
# /usr/local/redis/bin/redis-server /usr/local/redis/7003.conf
# /usr/local/redis/bin/redis-server /usr/local/redis/7004.conf
# /usr/local/redis/bin/redis-server /usr/local/redis/7005.conf
# /usr/local/redis/bin/redis-server /usr/local/redis/7006.conf
若没有报错,且
# ss -nltp
显示端口7001-7006全部被占用,则开启成功。
建立集群
# /usr/local/redis/bin/redis-cli --cluster create IP1:端口1 IP2:端口2 IP3:端口3 IP4:端口4 IP5:端口5 IP6:端口6 --cluster-replicas 1
# /usr/local/redis/bin/redis-cli --cluster create 10.1.1.28:7001 10.1.1.28:7002 10.1.1.28:7003 10.1.1.28:7004 10.1.1.28:7005 10.1.1.28:7006 --cluster-replicas 1
自动匹配
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.1.1.28:7005 to 10.1.1.28:7001
Adding replica 10.1.1.28:7006 to 10.1.1.28:7002
Adding replica 10.1.1.28:7004 to 10.1.1.28:7003
如果曾经有主从痕迹,则提问是否覆盖。
Can I set the above configuration? (type 'yes' to accept): yes
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
成功
测试,启动客户端必须加-c,以集群方式启动
/usr/local/redis/bin/redis-cli -c -p 7001
6.php添加redis拓展
# cd /software
# wget https://pecl.php.net/get/redis-5.1.1.tgz
# tar xvf /software/redis-5.1.1.tgz
# cd redis-5.1.1
# phpize
注:[
phpize若报错是因为,php命令没加入环境变量
以php安装路径为/usr/local/php/bin为例。
# echo 'export PATH=$PATH:/usr/local/php/bin' >> /etc/profile
# source /etc/profile
]
# ./configure && make && make install
# cd /usr/local/php/lib/php/extensions/no-debug-zts...(这个文件夹名字不固定)
-rwxr-xr-x 1 root root 2423256 Nov 20 06:15 redis.so
文件夹里存在这个文件,则安装成功
再配置php文件
# vim /usr/local/php/etc/php.ini
搜索Module Settings关键词,在他上面添加一行,
php<7 修改如下:
extension=redis.so
php7 修改如下:
extension=redis
# service php-fpm restart
验证
<?php
phpinfo();
?>
页面中搜索redis,会发现有redis模块
7.补:thinkphp,session与redis
Session驱动
支持指定 Session 驱动,配置文件如下:
return [
'type' => 'redis',
'prefix' => 'module',
'auto_start' => true,
// redis主机
'host' => '127.0.0.1',
// redis端口
'port' => 6379,
// 密码
'password' => '',
]
表示使用redis
作为session
类型。
目前内置支持使用redis
、memcache
和memcached
作为session驱动类型