当前位置:首页 > 问答 > 正文

Redis实战 笔记整理 学习Redis从笔记到实践,redis笔记内容

Redis实战 | 笔记整理 | 学习Redis从笔记到实践

场景引入:从"记不住"到"玩得转"

"小王,这个用户会话数据放内存里重启就没了,放MySQL又太慢,咋整?"上周同事老张的问题让我一愣,突然想起半年前在技术大会上听人提过Redis,当时还专门记了笔记,可翻出来一看——密密麻麻的命令和参数,完全不知道从哪入手...

三个月后的今天,我已经能用Redis给项目做缓存、计数器甚至消息队列了,这份从菜鸟到实战的笔记整理,或许能帮你少走弯路。

Redis核心三板斧

键值操作:比字典还好用

SET user:1001 "{'name':'张三','vip':true}" EX 3600  # 带过期时间的存储
GET user:1001  # 取数据时自动转义JSON
INCR article:2025:views  # 原子计数器

避坑指南

  • 键名用冒号分层(user:1001:profile)
  • 值超过10KB考虑压缩或分片
  • 生产环境一定要设过期时间!

数据结构:瑞士军刀般的灵活

上周用集合做的抽奖系统:

SADD lottery:2025-08 users 用户A 用户B 用户C
SRANDMEMBER lottery:2025-08 1  # 随机抽1人

实战场景对比: | 需求 | 适用结构 | 优势 | |----------------|------------|-----------------------| | 最近10条评论 | 列表 | LPUSH+LRANGE性能极高 | | 用户标签系统 | 集合 | 自动去重+交并差运算 | | 商品价格排序 | 有序集合 | ZRANGEBYSCORE秒出结果 |

Redis实战 笔记整理 学习Redis从笔记到实践,redis笔记内容

持久化:数据安全的双保险

RDB快照:像手机拍照,定期全量备份

save 900 1     # 15分钟至少1次修改触发
save 300 10    # 5分钟至少10次修改触发

AOF日志:像记账本,记录每个操作

appendfsync everysec  # 折衷方案,每秒同步

血泪教训:测试环境用默认配置,结果服务器宕机丢了一小时数据...

性能优化实战记录

管道技术:打包命令省快递费

# 普通模式:发N次快递
for i in range(100):
    r.set(f'key_{i}', i)
# 管道模式:打包一次发
with r.pipeline() as pipe:
    for i in range(100):
        pipe.set(f'key_{i}', i)
    pipe.execute()

实测耗时从200ms降到15ms!

热点Key发现与处理

某次活动出现每秒10万次访问的热点Key:

  1. redis-cli --hotkeys找出凶手
  2. 解决方案:
    • 本地缓存+随机过期时间
    • Key拆分:hot:news:2025 -> hot:news:2025:shard[0-9]

那些手册里没写的经验

内存管理三原则

  • 定期体检INFO memory看碎片率(>1.5要小心)
  • 大Key解剖redis-cli --bigkeys找出潜伏的"内存杀手"
  • 过期策略:volatile-lru和allkeys-lru的抉择

集群部署的坑

第一次搭集群时犯的错:

Redis实战 笔记整理 学习Redis从笔记到实践,redis笔记内容

  • 主从节点没跨机架部署(机房断电全挂)
  • 槽位分配不均导致某些节点负载过高
  • 没设置合理的cluster-node-timeout(网络抖动就主从切换)

我的Redis工具箱

  1. 监控三件套

    • redis-stat:实时仪表盘
    • slowlog get:抓出慢查询
    • monitor:慎用的流量监听
  2. 开发必备

    • SCAN替代KEYS(百万Key也不卡)
    • OBJECT encoding key:看底层数据结构
    • CLIENT LIST:查连接来源

从笔记到实战的蜕变

现在回头看最初的笔记,最大的感悟是:Redis就像乐高积木,单个命令很简单,组合起来却能搭建出各种奇妙架构,最近在做的实时排行榜功能,只用了一个ZSET结构就搞定了:

ZADD leaderboard 500 "玩家A" 300 "玩家B"
ZREVRANGE leaderboard 0 9  # TOP10玩家

下次再遇到数据存储的难题时,不妨先想想:这个需求用Redis该怎么做?你会发现,很多复杂的系统问题,原来早有优雅的解决方案。

发表评论