缓存组件选型

缓存选型看数据结构、持久化、集群模式、一致性与运维成本:Redis 数据结构与生态丰富,Memcached 形态简单;本地缓存与分布式缓存按数据量与新鲜度需求分层。

缓存组件选型

缓存选型要同时看数据结构、持久化、集群模式与运维成本。Redis 支持字符串、哈希、列表、集合、有序集合等结构,并提供 RDB/AOF 持久化、哨兵与集群模式;Memcached 形态更简单,只做纯内存键值,没有持久化和原生命令级数据结构。本地缓存与分布式缓存的差别在于延迟与一致性窗口。

基本信息

本地缓存进程内,延迟最低;多实例间一致性弱,需失效通知或短 TTL
分布式缓存集中管理、跨实例共享;引入网络开销与独立运维
混合用法本地短路加分布式兜底,配合失效广播
选型关注数据大小、读放大、淘汰策略、容量上限、序列化方式

组件对照

维度RedisMemcached
数据结构字符串、哈希、列表、集合、有序集合等以字符串键值为主
持久化RDB/AOF 可选无持久化
集群与高可用哨兵与集群模式成熟客户端分片为主
适用面缓存、计数、简单队列等多场景简单键值缓存

典型使用场景

  • 会话与令牌缓存:跨实例共享登录态,多副本下不会各自失忆
  • 热点数据缓存:把数据库压力前移到内存,配 TTL 与预热策略
  • 计数与限流:用原子自增实现访问计数与配额
  • 排行榜:有序集合按分值排序,避免应用层反复排序
  • 页面片段缓存:把渲染成本高的片段整体缓存,降低后端负载
  • 本地加速:单机热点用进程内缓存,配失效广播控制不一致窗口

连接与淘汰策略示例

连接与淘汰策略示例
# Redis 关键配置项(redis.conf 片段)
maxmemory 4gb                      # 必须设上限,否则写满后行为不可控
maxmemory-policy allkeys-lru       # 纯缓存场景常用 LRU 淘汰
timeout 300                        # 空闲连接回收
# 查看运行状态
redis-cli info memory | grep used_memory_human
redis-cli info stats | grep -E 'keyspace_hits|keyspace_misses|evicted_keys'
命中率、驱逐数与回源量要一起看:驱逐数上涨往往意味着容量或淘汰策略需要复核,而不是继续加实例。
缓存与数据库的一致性策略要提前定:先更新库还是先删缓存、删除失败如何补偿,写清楚才不会出现长期脏数据。

易错点

  • 本地缓存没有失效机制,数据更新后各实例长期返回旧值
  • 没有设置容量上限与淘汰策略,写满后触发非预期驱逐或写入失败
  • 把缓存当数据库使用,持久化与一致性预期不匹配,重放数据困难
  • 大 key 与热 key 未治理,单个键阻塞实例,拖慢整批请求

数据来源与参考

  • Redis 官方文档:数据结构与集群
  • Memcached 官方文档:概览与特性
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌