缓存和竞争条件

时间:2012-07-31 15:50:50

标签: php caching race-condition

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

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

所以我认为一个解决方案是:当请求正在等待锁定时,它将检查数据是否在密钥处。如果它在那里而不是从密钥返回数据而不是更新它。任何人都可以想到任何建议吗?在等待锁定爆炸memcache服务器的同时检查密钥?

1 个答案:

答案 0 :(得分:1)

我认为不值得修改锁定采集代码。获得锁定后,您只需执行get,如果数据存在,请清除锁定,只需返回数据而不会访问数据库。

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