Spring cache采用的是什么缓存模式?
Cache Aside 模式
https://www.ctolib.com/topics-114308.html
缓存模式
Cache Aside 更新模式
Read/Write Through 更新模式 先更新缓存,缓存负责同步更新数据库
Write Behind Caching 更新模式 先更新缓存,缓存定时异步更新数据库
http://www.cnblogs.com/llzhang123/p/9037346.html 避坑指南
更新策略
有三种讨论:
先更新数据库,再更新缓存 ×
先删除缓存,再更新数据库
先更新数据库,再删除缓存
错误:
先更新数据库,再更新缓存 原因:2次并发write操作,先更新数据库的反而后更新缓存
正确:
先更新数据库,再删除缓存 这是Cache Aside的方式
先删缓存,再更新数据库 也可能造成不一致情况
solution:
采用延时双删策略
(1)先淘汰缓存
(2)再写数据库(这两步和原来一样)
(3)休眠1秒,再次淘汰缓存
采用这种同步淘汰策略,吞吐量降低怎么办?
ok,那就将第二次删除作为异步的。自己起一个线程,异步删除。这样,写的请求就不用沉睡一段时间后了,再返回。这么做,加大吞吐量。
第二次删除,如果删除失败怎么办?
提供一个保障的重试机制即可。(binlog + 队列)
网友评论