内容施工中, 请稍后查看…
一个好的缓存应该保证的目标
- 可复用, 对于不同的接口不需要重复开发
- 妥善解决 缓存雪崩, 缓存击穿, 缓存穿透 问题
- 可配置缓存策略(例如存储方式, 是否存储空值)
- 提供监控能力, 缓存命中率等
API设计
查询单个元素
批量查询
map类型
查询某个元素, 所有元素, 多个元素, 获取长度
删除元素
选项控制
是否允许空值, 设置空值的默认值, 设置空值的过期时间
随机过期时间
缓存击穿, 大量请求同时查询某一个key, 导致缓存还未建立前发送大量请求, 需要在业务逻辑测加上锁
缓存一致性
先更新数据库, 再更新缓存 ==> 更新失败脏数据, 并发更新写入历史数据
先更新缓存, 再更新数据库 ==> 并发更新写入历史错误数据 ==> 不建议
先删除缓存, 再更新数据库 ==> 重新载入旧数据 ==> 延迟双删除策略
先更新数据库, 再删除缓存 ==> 读取旧数据, 相对最优方案
针对读多写少场景, 可以先更新数据库再删除缓存
针对读写相当或者写多读少的场景, 先更新数据库再更新缓存, 可减少数据库的读取压力
使用BinLog或者MQ投递更新消息, 从而保证缓存最终一定被更新.
最后更新: 2026年04月22日 21:55
版权声明:本文为原创文章,转载请注明出处