概述Redis 在高并发场景下常用于读多写少的热点数据缓存。本文围绕缓存命中率、内存策略与热点治理给出实战建议,并明确关键参数与验证方法,确保优化可量化与复现。核心策略分层缓存:本地(L1)+ Redis(L2);避免所有请求都击中远端。Key 设计:包含业务维度与版本号;合理分桶,减少热点集中在单个键。TTL 策略:在稳定性与准确性之间平衡;核心数据使用随机 TTL(抖动)降低雪崩风险。内存与逐出策略(已验证)`maxmemory`:限制实例可用内存,避免 OOM。`maxmemory-policy`:`allkeys-lru`:按最近最少使用淘汰;常用通用策略。`allkeys-lfu`:按使用频率淘汰;对热点识别更稳健。`volatile-ttl`:优先淘汰 TTL 更短的键(仅限有过期的键)。热点与穿透治理热点拆分:将单个超热点键拆分为多个分片键;或使用局部缓存(如本地 LRU)。缓存穿透:为不存在的资源写入短 TTL 的空值或使用布隆过滤器。缓存雪崩:过期时间加入随机抖动;限流与降级兜底。性能实践Pipeline:批量读写降低 RTT;按 100–500 条为一批次(结合业务验证)。Lua 原子操作:在服务端合并计数/校验逻辑,减少往返与竞态。连接与线程:合理连接池与 I/O 线程配置,避免阻塞。示例Pipeline 读写# 以客户端为例(伪代码): pipeline.set(k1, v1).expire(k1, 600) pipeline.set(k2, v2).expire(k2, 600) pipeline.exec() Lua 热点防击穿(伪代码)local v = redis.call('GET', KEYS[1]) if v then return v end redis.call('SET', KEYS[1], ARGV[1], 'EX', ARGV[2]) return ARGV[1] 验证与监控命中率:观测 `keyspace_hits`/`keyspace_misses`;分业务/接口统计。内存与逐出:`used_memory`、`evicted_keys`;在压测与高峰期关注变化。端到端指标:P95/P99 延迟、限流触发率;对热点接口建独立告警。常见误区TTL 过短导致频繁回源;过长造成陈旧数据。所有键共享同一过期时间,易发生雪崩。未区分冷热数据,导致内存浪费与逐出不合理。结语通过合理的 Key 设计、逐出策略选择与热点治理手段,结合监控与压测闭环,Redis 可在高并发场景下稳定提升吞吐与体验。

发表评论 取消回复