如何使用乐观并发控制解决读取缓存中的冲突?

3
我们目前有一个读取缓存,当缓存未命中时使用乐观并发控制。我们预计不会有太多冲突,所以选择了乐观并发控制。但是,当我们真正遇到冲突时,我有点不确定该怎么做。
如果缓存未命中,我们从数据库中获取相关行,然后将其放入缓存以供将来参考。在将其放入缓存之前,我们确保缓存键的值自我们最初的数据库读取以来没有更改。如果已更改,我当前倾向于使缓存条目无效,以确保安全,但这似乎有点低效。是否有更好、仍然安全的替代方案?
值得一提的是,我们使用Redis作为缓存层,MySQL作为后端存储。
1个回答

2
如果冲突很少,为什么不再次WATCH关键字,重新生成缓存数据,并再次尝试填充Redis。只需重复此过程,直到您的EXEC最终返回干净的结果。您可以将最大重试次数设置为某个合理值,如果超过该值,则使缓存无效并通知管理员。通知步骤似乎很重要,因为如果您的乐观锁失败超过5次,则可能存在一些奇怪的情况,您应该仔细查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接