memcache怎麼定期刪除不常用的資料

來源:互聯網
上載者:User
memcache如何定期刪除不常用的資料
如題,如何防止memcache裡的資料無限制增長,如何?定期刪除長時間不用或使用頻率低的資料。線上等!

------解決方案--------------------
我就知道memcache可以像session或cookie那樣設個到期時間
------解決方案--------------------
定製規則;有能力可以修改memcache實現
------解決方案--------------------
memcache是在slab記憶體池的基礎上, 每個slab內維護LRU鏈表, 每個NODE具有生命期, 所有Cache的NODE組成Hash表。

memcache採用懶惰刪除機制, 其記憶體請求步驟大致是這樣一個請求鏈: 根據node的size定位到slab ---> 從該slab的LRU尾部向前尋找到期且reference==1的NODE, 如果找到, 則從hash表與LRU中unlink此NODE, 並將此NODE插入到LRU頭部並且reference置1, 將輸入存入node尾部, 重新插入到雜湊表中. 如果沒找到, 那麼會直接向slab申請新的記憶體來儲存NODE, 這也就是記憶體池的功能了, 如果申請失敗, 那麼接下來的策略是重新掃描LRU, 找出那些雖然沒有到期, 但reference==1的NODE, 直接回收使用, 這是不得已的策略. 如果這個策略都失敗了, 我印象中還有一個策略, 是對於那些生命期已經失效3天並且當前refercence != 1的結點強制回收, 我記得注釋裡說那是一個小BUG, 這樣處理是OK的, 大概意思是:somewhere refer to this node, becuase nowhere refers to it, 不知道這個BUG發生在哪裡,我當初是沒研究出來, 因為get/remove都是配對出現在memcache的各個函數裡的, 真不知道引用計數怎麼會失效3天還不為0.

所以,你看懂了沒... 也就是儘可能的把記憶體配置向外推, 程式一開始就分配了很大的malloc記憶體充當記憶體池由slab管理, 而記憶體的重用是由LRU鏈表完成的, 不是一個線程定期掃描, 而是有需求才檢測的方法, 達到了非同步效果.
------解決方案--------------------
探討
memcache是在slab記憶體池的基礎上, 每個slab內維護LRU鏈表, 每個NODE具有生命期, 所有Cache的NODE組成Hash表。

memcache採用懶惰刪除機制, 其記憶體請求步驟大致是這樣一個請求鏈: 根據node的size定位到slab ---> 從該slab的LRU尾部向前尋找到期且reference==1的NODE, 如果找到, 則從hash表與LRU中unlink此……

------解決方案--------------------
LS已經解釋的很詳細了...

一句話總結的話....
你只要在啟動memcached的時候,用-m參數設定memcached所能佔用的最大記憶體數,剩下的事情都是memcached自己搞定了,不需要你操心,它會把最沒用的資料自己扔掉
------解決方案--------------------
定期flush
------解決方案--------------------
記得java是有memcache的flush方法,php應該會有的
至於週期性事情,你可以在一個php檔案中寫入flush,在linux中crontab 定時請求,例如
*/10 */23 * * * wget -q --spider http://www.xxxx.com/statbyday/stat1.php > /dev/null 2>&1
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.