国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 服務器 > 管理維護 > 正文

Memcache存儲一些要點

2024-09-10 14:19:03
字體:
來源:轉載
供稿:網友

介紹

Memcache使用了Slab Allocator的內存分配機制:按照預先規定的大小,將分配的內存分割成特定長度的塊,以完全解決內存碎片問題

Memcache的存儲涉及到slab,page,chunk三個概念

1.Chunk為固定大小的內存空間,默認為96Byte。

2.page對應實際的物理空間,1個page為1M。

3.同樣大小的chunk又稱為slab。

Memcached再啟動的時候根據-n和-f參數,產生若干slab。具體應用中Memcache每次申請1page,并將這1M空間分割成若干個chunk,這些chunk有著同樣的大小,屬于同一個slab。

 

【添加】,通過memcache添加item的時候:

1.  Memcache計算item的大小(key+value+flags),選取合適的slab(剛好能放下該item的slab)

2.  如果這個item對應的slab未出現過,則申請1個page(注意,這1M空間不論是否達到memcached使用內存都可以申請成功)并加該item存入slab中的chunk

3.  如果item對應的slab出現過,則在該slab中優先選擇expired(free_chunks)和delete(在1.2.2中delete的chunk存在著不能被重復利用的問題)的chunk進行存儲,其次將選擇未使用過的chunk(free_chunks_end)進行存儲。

4.  如果item對應的slab出現過,但是對應的slab已經存儲滿了,那么會申請一個新的page,這個page被分為對應大小的chunk,繼續存儲。

5.  如果item對應的slab出現過,但是對應的slab已經存儲滿了并且memcache也達到了最大內存使用。將使用lru算法,清除item(可能將未過期的item清除)此時會有eviction++

 

【刪除】:

1.  Delete操作只是將該chunk置為刪除狀態,這樣在下次使用將優先利用這樣的chunk。

 

【flush】

1.  Flush操作相當于將所有的item失效的一個動作。并不會改變memcache內存分配情況。

 

一些注意

1. memcache已經分配的內存不會再主動清理。
2. memcache分配給某個slab的內存頁不能再分配給其他slab。
3. flush_all不能重置memcache分配內存頁的格局,只是給所有的item置為過期。
4. memcache最大存儲的item(key+value)大小限制為1M,這由page大小1M限制

5.由于memcache的分布式是客戶端程序通過hash算法得到的key取模來實現,不同的語言可能會采用不同的hash算法,同樣的客戶端程序也有可能使用相異的方法,因此在多語言、多模塊共用同一組memcached服務時,一定要注意在客戶端選擇相同的hash算法

6.啟動memcached時可以通過-M參數禁止LRU替換,在內存用盡時add和set會返回失敗

7.memcached啟動時指定的是數據存儲量,沒有包括本身占用的內存、以及為了保存數據而設置的管理空間。因此它占用的內存量會多于啟動時指定的內存分配量,這點需要注意。

8.memcache存儲的時候對key的長度有限制,php和C的最大長度都是250

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德钦县| 漠河县| 胶南市| 杨浦区| 海兴县| 闻喜县| 柘荣县| 施秉县| 六盘水市| 永仁县| 胶南市| 新营市| 灵宝市| 郎溪县| 土默特右旗| 紫金县| 海宁市| 阜城县| 怀集县| 互助| 平和县| 桂林市| 祥云县| 工布江达县| 东安县| 奉化市| 南宫市| 香河县| 化隆| 原阳县| 富锦市| 天津市| 新乡县| 承德县| 嵩明县| 香格里拉县| 古浪县| 宜州市| 凌云县| 曲水县| 远安县|