1 、双写模式
首先从数据安全方面考虑,如果同时有请求A和请求B同时进行操作,A先更新了数据库的一条数据,随后B马上有更
新了该条数据,但是可能因为网络延迟等原因,B却比A先更新了缓存,就会出现一种什么情况呢?缓存中的数据并
不最新的B更新过的数据,就导致了数据不一致的情况。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6e07dfefc3943d6b0315fd3850b8c170.png)
2、失效模式
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/c1ca6d55e7476197f3b4d5cd2b08a794.png)
2.1先删除缓存,在更新数据库
如果同时有一个请求A进行更新操作,请求B进行查询操作,就可能会出现A请求进行写操作前会删除缓存,B请
求刚好此时进来发现缓存是空的,B请求就会查询数据库,如果此时A请求的写操作还未完成,B请求查询到的就
还是旧的值,还是会将旧的值写入缓存,A请求将新的值写入数据库,此时就会导致数据不一致的问题,如果不
采用给缓存设置过期时间的策略,该数据永远都是脏数据。
解决这种情况可以采用延时双删的策略,就是在更新数据库之前先删除缓存,然后对数据库进行写入操作,数据
库更新完成之后再次进行删除缓存的操作,目的是删除读请求可能造成的缓存脏数据,第二次删除缓存之前可以
休眠几秒,这么做的目的就是确保读请求结束写请求可以删除读请求造成的脏数据。
2.2先更新数据库,在删除缓存
和上面的分析类似
3、 一致性要求高,仍用redis缓存
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e761a98c420cdfb45db9561775feabc2.png)