Redis消息发布订阅

  • 是什么?
  • 进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。
  • 常用命令

命令

语法

说明

SUBSCRIBE

SUBSCRIBE channel [channel …]

订阅给定的一个或多个频道的信息。

PSUBSCRIBE

PSUBSCRIBE pattern [pattern …]

订阅一个或多个符合给定模式的频道。

PUBLISH

PUBLISH channel message

PUBLISH channel message 将信息发送到指定的频道。

UNSUBSCRIBE

UNSUBSCRIBE [channel [channel …]]

指退订给定的频道。

PUNSUBSCRIBE

PUNSUBSCRIBE [pattern [pattern …]]

退订所有给定模式的频道。

PUBSUB

PUBSUB subcommand [argument [argument …]]

查看订阅与发布系统状态。

  • 第一个客户端:订阅一个名为"maoshu"频道

redis 避免rocketmq消息重复消费 redis消息机制_redis

  • 第二个客户端:向"maoshu"频道发送消息

redis 避免rocketmq消息重复消费 redis消息机制_数据_02

  • 第一个客户端:接受到"maoshu"频道发送的消息

redis 避免rocketmq消息重复消费 redis消息机制_数据_03

Redis的复制(Master/Slave)

  • 是什么?
  • 行话:也就是我们所说的主从复制,主机数据更新后根据配置和策略,
    自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主
  • 能干嘛?
  1. 读写分离:减轻同一台服务器执行sql的负担
  2. 容灾恢复:防止数据丢失导致系统奔溃
  • 复制原理
  1. slave启动成功连接到master后会发送一个sync命令
  2. Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步
  3. 全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。
  4. 增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步
  5. 但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

配置

  1. 命令设置

命令

语法

说明

slaveof

slaveof 目标主机ip 目标主机端口

临时设置链接一个主服务器,从主服务器中复制数据

info replication

info replication

查看当前服务器连接信息

slaveof no one

slaveof no one

断开连接主服务器

requirepass

requirepass

数据较重要的节点,主从复制时使用密码验证:

  1. 配置文件设置
  • 在从服务器中的redis.conf文件中加入
slaveof  slaveof 目标主机ip 目标主机端口

在主服务器启动完后再启从服务器,完成配置;

  • 模拟一主二仆

redis 避免rocketmq消息重复消费 redis消息机制_redis_04

  • 主服务器(端口:6379)添加五个数据

redis 避免rocketmq消息重复消费 redis消息机制_数据_05

  • 从服务器(6380/6381)获取参数

redis 避免rocketmq消息重复消费 redis消息机制_redis_06

redis 避免rocketmq消息重复消费 redis消息机制_数据_07

  • 当主服务器停止运行之后,从服务器会静止等待,直到主服务器重新连接.
  • 当从服务器停止运行之后,如果没有设置配置文件,从服务器会变为主服务器,需要重新进行连接.

哨兵模式

  • 当主服务器宏机之后,需要手动设置一台从服务器来作为主服务器才能够正常运作,这需要人工手动配置,很不方便,所以一般会使用哨兵模式自动进行修改.
  • 反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库
  • 模拟三个哨兵
  • 复制redis目录下的sentinel.conf文件三份,修改sentinel.conf中的配置
  • 配置监听的主服务器,这里sentinel monitor代表监控,mymaster代表服务器的名称,可以自定义,“目标主机地址” 代表监控的主服务器,"目标端口"代表端口,2代表只有两个或两个以上的哨兵认为主服务器不可用的时候,才会进行failover操作。
    sentinel monitor mymaster 192.168.11.128 6379 2
  • 设置 哨兵启动端口号 ,由于在同一机子上启动三个哨兵,所以需要使用不同的端口号
port 哨兵启动端口号
sentinel monitor mymaster 目标主机地址  目标端口 2
  • 三个哨兵配置文件除了端口号不同之外,其他都相同
  • 分别启动三个哨兵(启动顺序为:主服务器—>从服务器—>哨兵)
# 启动哨兵进程
./redis-sentinel ../sentinel-79.conf
./redis-sentinel ../sentinel-80.conf
./redis-sentinel ../sentinel-81.conf
  • 当主服务器关闭之后

redis 避免rocketmq消息重复消费 redis消息机制_服务器_08

  • 过段时间哨兵会监控到主服务器已经挂了,就会在剩下两台服务器之中挑选出一台作为主服务器

redis 避免rocketmq消息重复消费 redis消息机制_数据_09

  • 而其他从服务器自动将主服务器连接更换为新的主服务器

redis 避免rocketmq消息重复消费 redis消息机制_服务器_10