高并发下数据库和缓存保持一致的情况策略
- znm不懂java,没用过redis, 硬看代码没看出来怎么保证失败情况,其实就是更新数据库或者缓存失败的处理,QPS 降低不可避免。
还是CPA 原则自己取舍了
看到了更改缓存或者数据库貌似后面有延时,这个算是更新成功,正常情况的保证? - Romney
- znm我感觉还是保证不了,虽然你先删除了缓存,但是你更新数据库的时候还是可以从cache 读的(没有就从新从数据库读), 你加的那个lock,不影响读数据库
- Romney更新和读的时候的分布式锁用的是一个key, 也就是一个锁.
所以读的线程要想从db读, 要等到更新的线程更新完了释放了这把锁, 才能从db读到. - znm竟然这么用锁,那我觉得可以保证了,但是并发就悲剧了
- hanfengzxh这是分布式锁 iOS fly ~
- jqustc每100ms尝试不是个好的设计 太耗资源了
- Hisoka-J你的get和trylock是原子的吗?
如果不是那不行,建议用redis配合set ex nx参数来实现,这是最简单最好的,被无数业务验证过的可靠方案 iOS fly ~ - Hisoka-J也可以试试pika iOS fly ~