2012-07-31 66 views
4

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

现在从日志记录中看到,虽然有一个请求A正在等待缓存,但其他请求B可能会完成读取数据并将其放入缓存,因此请求A无法等待并覆盖数据。

所以我认为一个解决方案是:当一个请求正在等待锁定时,它将检查数据是否存在于密钥中。如果它有返回来自密钥的数据而不是更新它。任何人都可以考虑任何建议吗?在等待锁定时检查密钥是否会炸毁memcache服务器?

+0

所以你正在抓取,做一些东西,然后再次更新相同的密钥?这是writeelock还是readlock? – joschua011 2012-07-31 21:47:38

回答

1

我不认为这是值得修补锁获取代码很多。一旦你有锁,你可以简单地做一个get,如果数据在那里,清除锁并简单地返回数据而不打数据库。

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