"小王,这个用户会话数据放内存里重启就没了,放MySQL又太慢,咋整?"上周同事老张的问题让我一愣,突然想起半年前在技术大会上听人提过Redis,当时还专门记了笔记,可翻出来一看——密密麻麻的命令和参数,完全不知道从哪入手...
三个月后的今天,我已经能用Redis给项目做缓存、计数器甚至消息队列了,这份从菜鸟到实战的笔记整理,或许能帮你少走弯路。
SET user:1001 "{'name':'张三','vip':true}" EX 3600 # 带过期时间的存储 GET user:1001 # 取数据时自动转义JSON INCR article:2025:views # 原子计数器
避坑指南:
上周用集合做的抽奖系统:
SADD lottery:2025-08 users 用户A 用户B 用户C SRANDMEMBER lottery:2025-08 1 # 随机抽1人
实战场景对比: | 需求 | 适用结构 | 优势 | |----------------|------------|-----------------------| | 最近10条评论 | 列表 | LPUSH+LRANGE性能极高 | | 用户标签系统 | 集合 | 自动去重+交并差运算 | | 商品价格排序 | 有序集合 | ZRANGEBYSCORE秒出结果 |
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!
某次活动出现每秒10万次访问的热点Key:
redis-cli --hotkeys
找出凶手hot:news:2025 -> hot:news:2025:shard[0-9]
INFO memory
看碎片率(>1.5要小心)redis-cli --bigkeys
找出潜伏的"内存杀手"第一次搭集群时犯的错:
cluster-node-timeout
(网络抖动就主从切换)监控三件套:
redis-stat
:实时仪表盘slowlog get
:抓出慢查询monitor
:慎用的流量监听开发必备:
SCAN
替代KEYS(百万Key也不卡)OBJECT encoding key
:看底层数据结构CLIENT LIST
:查连接来源现在回头看最初的笔记,最大的感悟是:Redis就像乐高积木,单个命令很简单,组合起来却能搭建出各种奇妙架构,最近在做的实时排行榜功能,只用了一个ZSET结构就搞定了:
ZADD leaderboard 500 "玩家A" 300 "玩家B" ZREVRANGE leaderboard 0 9 # TOP10玩家
下次再遇到数据存储的难题时,不妨先想想:这个需求用Redis该怎么做?你会发现,很多复杂的系统问题,原来早有优雅的解决方案。
本文由 养杉 于2025-08-05发表在【云服务器提供商】,文中图片由(养杉)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/547012.html
发表评论