确保Redis缓存一致性的N种方法
1、及时失效法
当程序需要update该数据时,先更新数据库数据数据,若数据库update成功,则重新为Redis该key值设置一个极短的过期时间,当过期之后,下一个请求自然会去数据库获取最新版本的数据
2、互斥锁
当程序需要update数据时,更新完数据库,再去更新缓存,当然这里会有一个逻辑漏洞:A线程在update数据时,刚擦除缓存。还没来得及写入缓存,此时若线程B执行查询操作,从数据库重新写入缓存一个老数据,当A再去写入缓存的时候就会发现已经有数据了,这样就会导致缓存和数据库不一致。
解决此类问题,需要把更新Redis的操作做互斥锁设计,单机环境使用sync互斥锁保证/分布式使用分布式锁,更新缓存和去数据库更新缓存必须只有一个线程执行才可,这样就可以保证缓存中是最新的数据
3、乐观锁
为数据添加一个版本号,每次去缓存中获取的时候都去数据库核对一下版本号,相同则直接返回,不相同则更新,更新的时候同样需要使用互斥锁,或分布式锁保证操作的原子性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!