学无止境

少年辛苦终身事,莫向光阴惰寸功。——唐·杜荀鹤《题弟侄书堂》


Redis高级操作

Redis高级特性指南

一、发布订阅(Pub/Sub)模式

1.1 概述

Redis发布订阅(pub/sub)是一种消息通信模式:

  • 发送者(pub)发送消息
  • 订阅者(sub)接收消息
  • 支持多个频道(channel)

1.2 消息格式

消息包含三个部分:

  1. 消息类型:

    • subscribe: 订阅成功
    • unsubscribe: 取消订阅
    • message: 接收到消息
  2. 频道名称

  3. 具体消息内容

1.3 基本命令

# 订阅频道
subscribe channel [channel ...]

# 订阅模式(支持通配符)
psubscribe pattern [pattern ...]

# 发布消息
publish channel message

# 退订频道
unsubscribe [channel ...]

# 退订模式
punsubscribe [pattern ...]

1.4 使用示例

# 终端1:订阅频道
redis-cli
> subscribe chat1
Reading messages... (press Ctrl-C to quit)

# 终端2:发布消息
redis-cli
> publish chat1 "Hello World"

二、主从复制

2.1 概述

主从复制允许从服务器(slave)从主服务器(master)同步数据,实现备份和读写分离。

2.2 特点

  • 一个主服务器可以有多个从服务器
  • 从服务器可以连接其他从服务器
  • 主从复制不会阻塞主服务器
  • 提供数据备份和读写分离能力

2.3 配置步骤

2.3.1 主服务器配置

  1. 编辑配置文件:
sudo vim /etc/redis/redis.conf
  1. 设置主服务器IP:
bind 192.168.1.10
  1. 重启Redis服务:
sudo service redis restart

2.3.2 从服务器配置

  1. 编辑配置文件:
sudo vim /etc/redis/redis.conf
  1. 添加主从配置:
bind 192.168.1.11
slaveof 192.168.1.10 6379
  1. 重启Redis服务:
sudo service redis restart

2.4 主从复制验证

# 在主服务器上写入数据
set key1 value1

# 在从服务器上读取数据
get key1

三、持久化机制

3.1 RDB持久化

RDB持久化通过快照的方式保存数据库状态。

3.1.1 触发方式

  1. 手动触发:
# 同步保存
save

# 异步保存
bgsave
  1. 自动触发:
# redis.conf配置
save 900 1      # 900秒内有1个改动
save 300 10     # 300秒内有10个改动
save 60 10000   # 60秒内有10000个改动

3.2 AOF持久化

AOF持久化记录服务器执行的所有写操作。

3.2.1 配置AOF

# redis.conf
appendonly yes
appendfilename "appendonly.aof"

# 同步策略
appendfsync always    # 每次写入都同步
appendfsync everysec  # 每秒同步一次
appendfsync no       # 操作系统决定同步时机

3.3 持久化最佳实践

  1. 同时使用RDB和AOF
  2. RDB用于备份
  3. AOF用于保证数据安全性
  4. 定期对AOF文件进行重写
  5. 根据实际需求调整同步策略

四、常见问题与解决方案

4.1 主从复制常见问题

  1. 复制延迟
    • 监控主从延迟时间
    • 合理设置网络带宽
  2. 数据不一致
    • 定期检查主从数据
    • 配置适当的同步策略

4.2 持久化注意事项

  1. RDB可能丢失最后一次快照后的数据
  2. AOF文件会比RDB文件大
  3. AOF重写可能消耗系统资源
  4. 建议定期备份持久化文件

五、性能优化建议

  1. 合理配置持久化策略
  2. 适当调整主从同步频率
  3. 控制AOF文件大小
  4. 监控系统资源使用情况
  5. 定期清理无用数据