緩存框架 Ehcache Memcache Redis

緩存:通過在內存中緩存數據,減少讀取數據庫的次數。

過程:1、客戶端請求數據,如緩存服務器中存在,則直接返回數據;2、如緩存服務器中不存在,則請求數據庫,同時緩存服務器保存一份數據;3、每當數據庫數據變更時,同步更新緩存服務器


ehcache

純java實現,緩存在內存中,可持久化到硬盤,效率高於memcache;但是緩存共享麻煩,集羣分佈式應用不方便。如果是單個應用或者對緩存訪問要求很高的應用,用ehcache。

ehcache也有緩存共享方案,不過是通過RMI或者Jgroup多播方式進行廣播緩存通知更新,緩存共享複雜,維護不方便;簡單的共享可以,但是涉及到緩存恢復,大數據緩存,則不合適。


memcache

多種語言實現,K/V緩存,緩存在內存中,支持分佈式緩存,可通過第三方實現持久化,基於libevent的事件處理。

memcache在客戶端中實現分佈式緩存,通過分佈式算法指定目標數據的節點。


redis

K/V緩存,支持豐富的數據結構(list, set, hash),支持數據持久化,支持分佈式緩存。

通過socket訪問到緩存服務,效率比ehcache低,比數據庫要快很多,處理集羣和分佈式緩存方便,有成熟的方案。如果是大型系統,存在緩存共享、分佈式部署、緩存內容很大的,建議用redis。


Redis如何實現分佈式可拓展性?
2.8以前的版本:與Memcached一致,可以在客戶端實現,也可以使用代理,twitter已開發出用於Redis和Memcached的代理Twemproxy 。
3.0 以後的版本:相較於Memcached只能採用客戶端實現分佈式存儲,Redis則在服務器端構建分佈式存儲。Redis Cluster是一個實現了分佈式且允許單點故障的Redis高級版本,它沒有中心節點,各個節點地位一致,具有線性可伸縮的功能。如圖給出Redis Cluster的分佈式存儲架構,其中節點與節點之間通過二進制協議進行通信,節點與客戶端之間通過ascii協議進行通信。在數據的放置策略上,Redis Cluster將整個 key的數值域分成16384個哈希槽,每個節點上可以存儲一個或多個哈希槽,也就是說當前Redis Cluster支持的最大節點數就是16384

新版本(3.0)的Redis是指集羣分佈式,也就是說集羣本身均衡客戶端請求,各個節點可以交流,可拓展行、可維護性更強大


memcache和redis都是分佈式緩存:

memcache多線程(多核),redis單線程(只使用單核)

memcache只支持String,redis支持豐富的數據結構

memcache在客戶端中實現分佈式緩存,redis在服務端中實現分佈式緩存。

存儲大數據(>100k)memcache性能高,小數據redis性能高

memcache K/V的value最大1M,redis最大512M

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章