缓存组件选型
缓存选型要同时看数据结构、持久化、集群模式与运维成本。Redis 支持字符串、哈希、列表、集合、有序集合等结构,并提供 RDB/AOF 持久化、哨兵与集群模式;Memcached 形态更简单,只做纯内存键值,没有持久化和原生命令级数据结构。本地缓存与分布式缓存的差别在于延迟与一致性窗口。
基本信息
| 本地缓存 | 进程内,延迟最低;多实例间一致性弱,需失效通知或短 TTL |
|---|---|
| 分布式缓存 | 集中管理、跨实例共享;引入网络开销与独立运维 |
| 混合用法 | 本地短路加分布式兜底,配合失效广播 |
| 选型关注 | 数据大小、读放大、淘汰策略、容量上限、序列化方式 |
组件对照
| 维度 | Redis | Memcached |
|---|---|---|
| 数据结构 | 字符串、哈希、列表、集合、有序集合等 | 以字符串键值为主 |
| 持久化 | 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'命中率、驱逐数与回源量要一起看:驱逐数上涨往往意味着容量或淘汰策略需要复核,而不是继续加实例。
缓存与数据库的一致性策略要提前定:先更新库还是先删缓存、删除失败如何补偿,写清楚才不会出现长期脏数据。