一、Memcache
1. memecache 把數據全部存在內存之中,斷電后會掛掉,數據不能超過內存大小
redis有部份存在硬盤上,這樣能保證數據的持久性。
2. Memcache使用了Slab Allocator的內存分配機制:按照預先規定的大小,將分配的內存分割成特定長度的塊,以完全解決內存碎片問題。
3. memcache 存在內存中,分配的內存滿后,會按一定的規則刪除一些k/v數據,重啟后自然全部丟失。
4. 過期策略--memcache在set時就指定,例如set key1 0 0 8,即永不過期。Redis可以通過例如expire 設定。
5. 首先要說明的是Memcached支持最大的存儲對象為1M。它的內存分配比較特殊,但是這樣的分配方式其實也是基於性能考慮的,簡單的分配機制可以更容易回收再分配,節省對CPU的使用。大於1M需要拆分。
6. memcached能接受的key的最大長度是,255字符。
7. 同一份數據同時發送了一個set命令和一個get命令,它們不會影響對方,但是get以后,處理期間可能先被其他Set了,后面的Set會覆蓋前面的,但是memcached 1.2.5以及更高版本,提供了gets和cas命令,它們可以解決上面的問題。如果您使用gets命令查詢某個key的item,memcached會 給您返回該item當前值的唯一標識。如果您覆寫了這個item並想把它寫回到memcached中,您可以通過cas命令把那個唯一標識一起發送給 memcached。如果該item存放在memcached中的唯一標識與您提供的一致,您的寫操作將會成功。如果另一個進程在這期間也修改了這個 item,那么該item存放在memcached中的唯一標識將會改變,您的寫操作就會失敗。
8. 無身份驗證,認為身份驗證是更高層的問題。
9. 刪除Delete操作只是將該chunk置為刪除狀態,這樣在下次使用將優先利用這樣的chunk。
10. Flush操作相當於將所有的item失效的一個動作。並不會改變memcache內存分配情況。
11. memcache已經分配的內存不會再主動清理。
12. memcache分配給某個slab的內存頁不能再分配給其他slab。
13. flush_all不能重置memcache分配內存頁的格局,只是給所有的item置為過期。
14. memcache最大存儲的item(key+value)大小限制為1M,這由page大小1M限制。
15. 由於memcache的分布式是客戶端程序通過hash算法得到的key取模來實現,不同的語言可能會采用不同的hash算法,同樣的客戶端程序也有可能使用相異的方法,因此在多語言、多模塊共用同一組memcached服務時,一定要注意在客戶端選擇相同的hash算法。
16. 啟動memcached時可以通過-M參數禁止LRU替換,在內存用盡時add和set會返回失敗。
17. memcached啟動時指定的是數據存儲量,沒有包括本身占用的內存、以及為了保存數據而設置的管理空間。因此它占用的內存量會多於啟動時指定的內存分配量,這點需要注意。
二、Redis
1. Redis不僅僅支持簡單的k/v類型的數據,同時還提供list,set,hash等數據結構的存儲。
2. Redis支持數據的備份,即master-slave模式的數據備份。
3. Redis支持數據的持久化,可以將內存中的數據保持在磁盤中,重啟的時候可以再次加載進行使用。
4. Redis,具備一定的數據庫特征。
5. Redis數據可以存儲到硬盤,基本沒有過期策略。
6. redis有一個致命缺陷 當內存滿了時 dump數據cpu占用100%。
7.
三、Memcache和Redis區別
- Redis中,並不是所有的數據都一直存儲在內存中的,這是和Memcached相比一個最大的區別。
- Redis在很多方面具備數據庫的特征,或者說就是一個數據庫系統,而Memcached只是簡單的K/V緩存。
- 他們的擴展都需要做集群;實現方式:master-slave、Hash。
- 在100k以上的數據中,Memcached性能要高於Redis。
- 如果要說內存使用效率,使用簡單的key-value存儲的話,Memcached的內存利用率更高,而如果Redis采用hash結構來做key-value存儲,由於其組合式的壓縮,其內存利用率會高於Memcached。當然,這和你的應用場景和數據特性有關。
- 如果你對數據持久化和數據同步有所要求,那么推薦你選擇Redis,因為這兩個特性Memcached都不具備。即使你只是希望在升級或者重啟系統后緩存數據不會丟失,選擇Redis也是明智的。
- Redis和Memcache在寫入性能上面差別不大,讀取性能上面尤其是批量讀取性能上面Memcache更強。
四、其他分布式緩存