1.缓存不一致问题
1.双写策略
也就是把数据库跟缓存都更新,但存在先更新数据库还是先更新缓存的问题,而且如果有一个写入失败,那么就会出现缓存不一致。 双写策略优化:通过加事物的方式,把缓存跟数据库都写入成功才提交,有一个不成功就回退,但是如果缓存服务挂掉,那么我们连数据库都没法操作,所以不合适。
2.读更新写删除(最常用)
我们生产中最常用的方式,也就是读的时候更新缓存(我们缓存的时间要设置的短一些),写的时候把缓存删掉,这里不会直接删掉,会存在大K问题,所以我们一般是把这个缓存设置一个一毫秒的期限,这样也算删除。他跟双写没什么本质区别,就是把一个写改成了删除,不过因为更新耗费资源多,所以我们“删除”更好。 他其实也没有解决缓存不一致问题,不过因为他实现非常简单,而且我们缓存时间比较短,所以等缓存过期就行了,一般情况下也满足需求了。
3.重试机制

就是更新缓存的时候加上一个重试机制,但是很鸡肋,用不上。 重试机制优化:为了解决重试时间过长堵塞其他进程的执行,所以我们可以使用协程采用异步更新的方式。不过,再怎么优化,这个重试机制就是比较鸡肋的
4.延迟双删
延迟双删就是更新数据库后,先删除一次缓存,然后设置一个延迟时间,再删除一次缓存,实现很简单,难点在于延迟时间是多长,他实际上是一个动态的区间,要根据不同的业务场景而定,不过一般来说500毫秒就足够了
5.异步更新缓存


异步更新有上述两个问题,应对缓存更新失败我们会给管理员开一个后门,人为设置缓存,人工维护给线上有时间排查。
评论