一、最基本的保证
在进行数据更新的时候,先删除redis里面的缓存数据,然后再去更新我们的数据库,此时如果更新数据了操作失败了,那么我们也可以保证数据库缓存数据的一致性,这是最基本的保证双写不一致问题的办法
二、特殊场景
- 数据发生了变更,先删除了缓存,然后要去修改数据库,此时还没修改,一个请求过来,去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中,数据变更的程序完成了数据库的修改。
- 解决方案:异步串行化,在jvm中开一个JVM内部队列,更新数据的时候,根据数据的唯一标识,将操作路由之后,发送到一个jvm内部的队列中,读取数据的时候,如果发现数据不在缓存中,那么将重新读取数据+更新缓存的操作,根据唯一标识路由之后,也发送同一个jvm内部的队列中