Memcached:07---資料過期與記憶體刪除策略
阿新 • • 發佈:2021-02-13
一、memcached在資料刪除方面有效利用資源
資料不會真正從memcached中消失
- 上一篇文章https://dongshao.blog.csdn.net/article/details/113794035介紹過,memcached不會釋放已分配的記憶體。記錄超時後,客戶端就無法再看見該記錄 (invisible,透明),其儲存空間即可重複使用。
LazyExpiration
- memcached內部不會監視記錄是否過期,而是在get時檢視記錄的時間戳,檢查記錄是否過期。這種技術被稱為lazy(惰性)expiration。
- 因此,memcached不會在過期監視上耗費
CPU時間。
二、LRU:從快取中有效刪除資料的原理
概述
- memcached會優先使用已超時的記錄的空間,但即使如此,也會發生追加新記錄時空間不足的情況,此時就要使用名為 LeastRecentlyUsed(LRU)機制來分配空間。
- 顧名思義,這是刪除“最近最少使用”的記錄的機制。因此,當memcached的記憶體空間不足時(無法從slabclass獲取到新的空間時),就從最近未被使用的記錄中搜索,並將其空間分配給新的記錄。從快取的實用角度來看,該模型十分理想。
- 原理:當某個單元被請求時,維護一個計數器,通過計數器來判斷最近誰最少被使用,就把誰踢出。
備註
- 即使某個key是設定的永久有效期
,也一樣會被踢出來。
- 不過,有些情況下LRU機制反倒會造成麻煩。memcached啟動時通過“M”引數可以禁止LRU,如下所示:
memcached M m 1024
- 啟動時必須注意的是,小寫的“m”選項是用來指定最大記憶體大小的。
- 指定“M”引數啟動後,記憶體用盡時memcached會返回錯誤。話說回來,memcached畢竟不是儲存器,而是快取,所以推薦使用LRU。
三、memcached中的一些引數限制
- key的長度:二進位制協議設計出之前,最大支援250 位元組(二進位制協議支援 65536 個位元組),從1.3版本之後,memcahced引入了二進位制協議,理論上最大可使用65536位元組
- value的限制:1m,一般都是儲存一些文字,如新聞列表等等,這個值足夠了。
- 記憶體的限制:32位下最大設定到 2g。
- 如果有30g資料要快取,一般也不會單例項裝 30g,(不要把雞蛋裝在一個籃子裡),一般建議開啟多個例項(可以在不同的機器或同臺機器上的不同埠)