2012-07-31 107 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,如果數據在那裏,清除鎖並簡單地返回數據而不打數據庫。

這樣做也應該減少整體等待時間。