【问题标题】:How to resolve a conflict in a read-through cache using optimistic concurrency control?如何使用乐观并发控制解决通读缓存中的冲突?
【发布时间】:2011-11-11 17:30:54
【问题描述】:

我们目前有一个通读缓存,它在缓存未命中时填充缓存时使用乐观并发控制。我们预计不会有很多冲突,所以我们选择使用乐观并发控制。不过,当我们真的发生冲突时,我有点不确定该怎么办。

如果我们有缓存未命中,我们从数据库中提取相关行,然后将其放入缓存中以供将来参考。在我们将它放入缓存之前,我们确保缓存键的值自我们最初的数据库读取以来没有改变。如果有,我目前倾向于使缓存条目无效,只是为了安全起见,但这似乎有点低效。有没有更好的替代品,仍然安全?

作为记录,我们使用 Redis 作为缓存层,使用 MySQL 作为后备存储。

【问题讨论】:

    标签: mysql database caching concurrency redis


    【解决方案1】:

    如果冲突很少,那么为什么不再次使用WATCH 键,再次生成缓存数据,然后尝试再次填充 Redis。只需继续重复此过程,直到您的 EXEC 最终恢复正常。您可以将最大重试次数设置为合理的值,如果超过此值,只需使缓存无效并通知您的管理员。通知步骤似乎很重要,因为如果您的乐观锁失败超过 5 次,那么可能发生了一些奇怪的事情,您应该仔细查看。

    【讨论】:

      猜你喜欢
      • 2020-06-05
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多