起因
先删除redis 后操作数据库
先删除redis之后,还没有修改数据库。另外一个进程过来之后,查看redis中没有值,于是读取数据库中老的值,写到缓存中去。这个时候数据库就和缓存不一致了。
同样道理,先写数据库,删除缓存。写入之后,宕机了,导致删除失败。重启之后导致数据库和缓存数据不一致。
因为写和读是并发的,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。
如何解决?
合理设置过期时间,保证最终一致性
根据业务,合理设置时间。业务能够承受多长时间不一致的场景。保证最终一致性即可。
采用双删策略
删除redis 写入数据库 删除redis (多进行一步操作,即可解决)
异步更新缓存(基于订阅binlog的同步机制)
增量+全量
一个是全量(将全部数据一次写入到redis)
一个是增量(实时更新)
网友评论