4

我正在使用 memcache(不是 memcached),我可能同时有 10000 个请求命中缓存。这可能会导致竞争条件,所以我使用此代码http://terrychay.com/article/keeping-memcache-consistent.shtml来获取锁而不是设置密钥。

现在从日志记录中我看到,当一个请求 A 正在等待缓存时,其他请求 B 可能会完成获取数据并放入缓存,因此请求 A 没有等待和覆盖数据的点。

所以我认为一种解决方案是:当请求等待锁定时,它会检查数据是否存在于 key 处。如果它在那里而不是从键返回数据而不是更新它。其他人能想到任何建议吗?等待锁定时检查密钥会炸毁内存缓存服务器吗?

4

1 回答 1

1

我认为对锁定获取代码进行太多修改是不值得的。一旦你有了锁,你可以简单地做一个get,如果数据在那里,清除锁并简单地返回数据而不访问数据库。

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

于 2012-08-21T08:45:36.183 回答