缓存和竞争条件

Pit*_*ger 5 php caching race-condition

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

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

所以我认为一种解决方案是:当请求等待锁定时,它将检查数据是否存在于关键位置。如果存在,则从键返回数据而不是更新它。还有人能想到任何建议吗?等待锁定时检查密钥是否会导致内存缓存服务器崩溃?

Ja͢*_*͢ck 2

我认为不值得对锁获取代码进行太多修改。一旦获得锁,您可以简单地执行 a,get如果数据存在,则清除锁并简单地返回数据,而无需访问数据库。

这样做还可以减少总体等待时间。