xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • Redis 新手指南

    • Redis 概览
    • Redis 基础
    • Redis 高级用法与进阶指南
    • Redis基本事务操作详解

Redis 基础

📌 一、Redis 核心定位与特性

  1. 定义与价值
    Redis(Remote Dictionary Server)是内存型键值数据库,支持多种数据结构,兼具缓存、消息队列、分布式锁等功能。核心优势在于高性能(单机10万+ QPS)和丰富的数据模型,适用于高并发场景。

  2. 核心特性

    • 内存存储:数据全内存操作,读写速度极快
    • 多数据结构:支持9种数据类型(5种基础+4种高级),灵活应对复杂业务
    • 持久化:提供 RDB 快照 和 AOF 日志两种数据落盘方案
    • 高可用:通过主从复制、哨兵模式、集群实现故障自动转移
    • 原子操作:所有命令单线程执行,保证操作原子性

🧩 二、核心数据类型详解

1. 基础数据类型(5种)

类型结构特性典型场景命令示例
String文本/二进制数据缓存、计数器SET user:1 "Alice" INCR views
Hash字段-值映射表用户信息存储HSET user:1001 name "Bob" age 28
List双向链表消息队列、最新动态LPUSH tasks "task1" RPOP tasks
Set无序唯一集合共同好友、标签系统SADD tags:1001 "tech" "news"
Sorted Set带分数的有序集合排行榜、优先级队列ZADD rank 95 "PlayerA"

2. 高级数据类型(4种)

  • Bitmaps:位级操作(如记录30天签到)
    SETBIT sign:202408 15 1  # 8月15日签到
    BITCOUNT sign:202408     # 统计当月签到天数
  • HyperLogLog:海量数据去重(误差率0.81%)
    PFADD ip:202408 192.168.1.1
    PFCOUNT ip:202408        # 估算独立IP数
  • GEO:地理位置计算(基于Sorted Set实现)
    GEOADD shops 116.40 39.90 "Beijing"
    GEORADIUS shops 116.41 39.91 5 km  # 5公里内门店
  • Stream:支持消费组的消息队列
    XADD orders * product "Phone" price 599
    XREAD COUNT 2 STREAMS orders 0-0

💾 三、持久化机制精解

1. RDB(快照持久化)

# redis.conf 配置示例
save 900 1       # 15分钟内1次修改触发
save 300 10      # 5分钟内10次修改触发
dbfilename dump.rdb
  • 优点:恢复速度快(二进制压缩文件),适合冷备份
  • 缺点:可能丢失最近一次快照后的数据

2. AOF(操作日志追加)

appendonly yes
appendfsync everysec    # 每秒同步
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
  • 优点:数据丢失少(最多丢1秒数据),日志可读
  • 缺点:文件体积大,恢复速度慢

3. 混合持久化(Redis 4.0+)

aof-use-rdb-preamble yes  # RDB+AOF组合
  • 原理:AOF文件前半部分为RDB格式,后半部分为增量命令

⚙️ 四、高可用架构实战

1. 主从复制(读写分离)

# 从节点配置 (redis.conf)
replicaof 192.168.1.100 6379
masterauth yourpassword
  • 主节点处理写,从节点处理读,提升读并发能力

2. 哨兵模式(故障转移)

# sentinel.conf 配置
sentinel monitor mymaster 192.168.1.100 6379 2
sentinel down-after-milliseconds mymaster 5000
  • 自动监控主节点状态,主宕机时选举新主节点

3. Cluster集群(数据分片)

# 节点配置
cluster-enabled yes
cluster-config-file nodes.conf
# 创建集群
redis-cli --cluster create 192.168.1.100:7000 192.168.1.101:7000 --cluster-replicas 1
  • 数据分片存储(16384个槽),支持水平扩展

🚀 五、典型应用场景

1. 缓存加速

  • 模式:数据库查询结果缓存
  • 案例:商品详情页查询从 2s → 50ms

2. 分布式锁

# Python实现(原子操作)
lock = redis.set("res:lock", "uuid", nx=True, ex=10)
if lock:
    # 执行业务逻辑
    redis.delete("res:lock")

3. 实时排行榜

ZADD leaderboard 95 "PlayerA" 87 "PlayerB"
ZREVRANGE leaderboard 0 9 WITHSCORES  # TOP10

4. 消息队列

# List实现简单队列
LPUSH orders "order1001"
RPOP orders

🔧 六、性能调优关键点

  1. 内存优化

    • 避免 BigKey(单Key数据过大)
    • 使用 ziplist 压缩小哈希
    • 配置淘汰策略:maxmemory-policy allkeys-lru
  2. 网络优化

    • Pipeline 批量操作减少网络往返
    pipe = redis.pipeline()
    for i in range(1000):
        pipe.set(f"key{i}", f"value{i}")
    pipe.execute()
  3. 监控命令

    INFO memory      # 内存分析
    SLOWLOG GET 10   # 慢查询追踪

💎 总结:Redis 学习路径与实践指南

📚 知识体系全景

🛠️ 实践建议

  1. 数据类型选择:根据场景需求匹配结构(如对象存储用Hash,排序用Sorted Set)
  2. 持久化策略:
    • 容忍分钟级丢失 → RDB
    • 要求高可靠 → AOF每秒同步
    • 平衡方案 → RDB+AOF混合
  3. 性能陷阱规避:
    • 禁用 KEYS * → 用 SCAN 替代
    • 大Key拆分 → 单Value不超过10KB

学习资源推荐:

  • 命令手册:https://redis.io/commands
  • 经典教材:《Redis设计与实现》
  • 源码解析:https://github.com/huangz1990/redis-3.0-annotated
最后更新: 2025/8/26 10:07
Prev
Redis 概览
Next
Redis 高级用法与进阶指南