缓存和竞态条件

4
我正在使用memcache(而不是memcached),可能会有10000个请求同时访问缓存,这可能会导致竞态条件,因此我使用了这段代码http://terrychay.com/article/keeping-memcache-consistent.shtml来获取锁,然后设置键。
现在从日志中我发现,当一个请求A在等待缓存时,另一个请求B可能已经完成了数据的获取并将其放入缓存中,因此请求A等待并覆盖数据是没有意义的。
所以我想到的一个解决方案是:当一个请求在等待锁时,它将检查该键是否存在数据。如果存在,则返回键中的数据而不是更新它。还有其他人能想到任何建议吗?在等待锁时检查键是否会使memcache服务器崩溃吗?

所以你正在获取数据,做一些操作,然后再更新同一个键?这是写锁还是读锁? - joschua011
1个回答

1

我认为不值得过多地调整锁获取代码。一旦你获得了锁,你可以简单地执行一个get,如果数据存在,清除锁并直接返回数据而不需要访问数据库。

这样做还应该减少总等待时间。


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