场景一:先删除缓存在修改数据
这种方式在并发量小的时候是没有问题的,如果在高并发量的环境下,删除缓存,还没有完成写库,另一个请求来了,发现缓存为空,从数据库获取数据然后更新缓存,那么这个时候缓存中的数据其实是脏数据。
场景二: 先修改数据后删缓存
这种方式,主要是极端情况下,已经完成了数据库写库,但是恰巧线程宕掉了,此时缓存和数据库就没有保持一致性。
解决方案
延时双删策略
mysql binlog
启动Canal客户端获取binlog日志详情信息–> 逻辑判断–>缓存
场景一:先删除缓存在修改数据
这种方式在并发量小的时候是没有问题的,如果在高并发量的环境下,删除缓存,还没有完成写库,另一个请求来了,发现缓存为空,从数据库获取数据然后更新缓存,那么这个时候缓存中的数据其实是脏数据。
场景二: 先修改数据后删缓存
这种方式,主要是极端情况下,已经完成了数据库写库,但是恰巧线程宕掉了,此时缓存和数据库就没有保持一致性。
解决方案
延时双删策略
mysql binlog
启动Canal客户端获取binlog日志详情信息–> 逻辑判断–>缓存