为了保持数据库和Redis缓存的数据一致,既不能先修改数据库,也不能先删除缓存
解决办法:
1.延时双删:在修改数据库之后过段时间再删除缓存数据,可以降低脏数据出现,但是不能完全避免,存在风险
2.分布式锁:在读代码上设置共享锁只让读,不让写,写代码上设置排它锁,不让读也不让写,保证了数据强一致性
3.异步通讯:阿里的canal对mysql进行监听的binlog,对业务代码0侵入,但有短暂延时
为了保持数据库和Redis缓存的数据一致,既不能先修改数据库,也不能先删除缓存
解决办法:
1.延时双删:在修改数据库之后过段时间再删除缓存数据,可以降低脏数据出现,但是不能完全避免,存在风险
2.分布式锁:在读代码上设置共享锁只让读,不让写,写代码上设置排它锁,不让读也不让写,保证了数据强一致性
3.异步通讯:阿里的canal对mysql进行监听的binlog,对业务代码0侵入,但有短暂延时