一、Redis集群、主从复制,读写分离
redis的主从复制:主少从多、主写从读、读写分离、主写同步复制到从
搭建一主二从redis集群
1、搭建三台redis服务:使用一个redis模拟三台redis服务
提供三分redis配置文件:redis6379.conf、redis6380.conf、redis6381.conf
修改三份配置文件:以redis6379.conf为例
bind 127.0.0.1
port 6379
pidfile /var/run/redis_6379.pid
logfile "6379.log"
dbfilename dump6379.rdb
分别使用三个redis配置文件,启动三个redis服务:
redis-server redis6379.conf &
redis-server redis6380.conf &
redis-server redis6381.conf &
2、通过redis客户端分别连接三台redis服务:
redis-cli -h 127.0.0.1 -p 6379
redis-cli -h 127.0.0.1 -p 6380
redis-cli -h 127.0.0.1 -p 6381
3、查看三台redis服务在集群中的主从角色:
info replication
默认情况下,所有的redis服务都是主机,即都能写和读,且都还没有从机
4、先在6379进行写操作:
如:set k1 v1
三台redis服务互相独立,互不影响
5、设置主从关系:设从不设主
在6380上执行:
slaveof 127.0.0.1 6379
在6381上执行:
slaveof 127.0.0.1 6379
6、全量复制:一旦主从关系确定,会自动把主库上已有的数据同步复制到从库
在6380和6381上执行:
keys *
7、增量复制:主库写数据会自动同步到从库
在6379上执行:
在6380和6381上执行:keys *
8、主写从读,读写分离:
在6380和6381上执行:set k3 v3
此时会报错
9、主机宕机、从机原地待命:
关闭6379服务:
redis-cli -h 127.0.0.1 -p 6379 shutdown
查看6380和6381服务的主从角色:
info replication
10、主机恢复、一切恢复正常:
重启6379服务:
redis-server redis6379.conf &
客户端连接6379:
redis-cli -h 127.0.0.1 -p 6379
11、从机宕机、主机少一个从机、其它从机不变:
关闭6380服务:
redis-cli -h 127.0.0.1 -p 6380 shutdown
查看6379服务的主从角色:
info replication
查看6381服务的主从角色:
info replication
12、从机恢复、需要重新设置主从关系:
重启6380服务:
redis-server redis6380.conf &
客户端连接6380:
redis-cli -h 127.0.0.1 -p 6380
在6380上执行:
slaveof 127.0.0.1 6379
13、从机上位:
(1)主机宕机、从机原地待命:
关闭6379服务:
redis-cli -h 127.0.0.1 -p 6379 shutdown
查看6380和6381服务的主从角色:
info replication
(2)从机断开原来主从关系:
在6380上执行:
slaveof no one
查看6380服务的主从角色:
info replication
(3)重新设置主从关系:
在6381上执行:
slaveof 127.0.0.1 6380
(4)之前主机恢复、变成孤家寡人(单独主机,没有任何从机,也不从属于任何主机):
重启6379服务:
redis-server redis6379.conf &
客户端连接6379:
redis-cli -h 127.0.0.1 -p 6379
(5)从机的从机:
在6379上执行:
slaveof 127.0.0.1 6381
在6381上执行:
info replication
既是主机又是从机(但是6381依然不能写数据,只要是从机角色就不能写入数据)
二、Redis哨兵模式
redis哨兵模式:主机宕机、从机上位的自动版
(1)搭建一主二从集群架构:如上步骤
(2)提供哨兵配置文件:
在redis安装目下创建配置文件:redis_sentinel.conf
sentinel monitor dc-redis 127.0.0.1 6379 1
(3)启动哨兵服务
redis-sentinel redis_sentinel.conf
(4)主机宕机:
关闭6379服务:
redis-cli -h 127.0.0.1 -p 6379 shutdown
哨兵程序自动选择从机上位
(5)之前主机恢复:自动从属于新的主机
重启6379服务:
redis-server redis6379.conf &
客户端连接6379:
redis-cli -h 127.0.0.1 -p 6379
三、Redis消息订阅发布
Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。Redis 客户端可以订阅任意数量的频道
消息订阅者(client2 、 client5 和 client1)订阅频道 channel1
消息发布者发布消息到频道channel1,会被发送到三个订阅者
1、subscribe:订阅一个或者多个频道的消息
subscribe ch1 ch2 ch3
2、publish:将消息发布到指定频道
publish ch1 hello
3、psubcribe:订阅一个或者多个频道的消息,频道名支持通配符