緩存應用場景
ehcache直接在jvm虛擬機中緩存绒瘦,速度快称簿,效率高;但是緩存共享很麻煩惰帽,集群分布應用不方便憨降。
redis是通過socket訪問到緩存服務的,效率相對于echache低该酗,但是比數(shù)據庫要快很多授药,處理集群和分布式緩存比較方便士嚎,而且有成熟的解決方案。
如果是單個應用或者對緩存訪問要求很高的應用悔叽,用echache莱衩。
如果是大型的系統(tǒng),存在緩存共享娇澎、分布式部署笨蚁、緩存內容很大的,建議用redis趟庄。
補充一下:echache也有緩存共享的方案括细,不過是通過RMI或者Jgroup多播的方式進行廣播緩存、通知更新的戚啥,緩存共享比較復雜奋单,維護不方便;簡單的緩存共享可以虑鼎,但是涉及到緩存恢復辱匿,大數(shù)據緩存,則不適合炫彩。
redis和mecached相比的獨特之處:
1: redis可以用來做存儲(storge), 而memccached是用來做緩存(cache)
2:? 這個特點主要因為其有”持久化”的功能.
3: 存儲的數(shù)據有”結構”,對于memcached來說,存儲的數(shù)據,只有1種類型--”字符串”,而redis則可以存儲字符串,鏈表,哈希結構,集合,有序集合
性能方面:沒有必要過多的關心性能匾七,因為二者的性能都已經足夠高了。由于Redis只使用單核江兢,而Memcached可以使用多核昨忆,所以在比較上,平均每一個核上Redis在存儲小數(shù)據時比Memcached性能更高杉允。而在100k以上的數(shù)據中邑贴,Memcached性能要高于Redis,雖然Redis最近也在存儲大數(shù)據的性能上進行優(yōu)化叔磷,但是比起Memcached拢驾,還是稍有遜色。說了這么多改基,結論是繁疤,無論你使用哪一個,每秒處理請求的次數(shù)都不會成為瓶頸秕狰。(比如瓶頸可能會在網卡)
內存使用效率:使用簡單的key-value存儲的話稠腊,Memcached的內存利用率更高,而如果Redis采用hash結構來做key-value存儲鸣哀,由于其組合式的壓縮架忌,其內存利用率會高于Memcached。當然我衬,這和你的應用場景和數(shù)據特性有關叹放。
數(shù)據持久化:如果你對數(shù)據持久化和數(shù)據同步有所要求饰恕,那么推薦你選擇Redis,因為這兩個特性Memcached都不具備许昨。即使你只是希望在升級或者重啟系統(tǒng)后緩存數(shù)據不會丟失懂盐,選擇Redis也是明智的。
數(shù)據結構:當然糕档,最后還得說到你的具體應用需求。Redis相比Memcached來說拌喉,擁有更多的數(shù)據結構和并支持更豐富的數(shù)據操作速那,通常在Memcached里,你需要將數(shù)據拿到客戶端來進行類似的修改再set回去尿背。這大大增加了網絡IO的次數(shù)和數(shù)據體積端仰。在Redis中,這些復雜的操作通常和一般的GET/SET一樣高效田藐。所以荔烧,如果你需要緩存能夠支持更復雜的結構和操作,那么Redis會是不錯的選擇汽久。
網絡IO模型方面:Memcached是多線程鹤竭,分為監(jiān)聽線程、worker線程景醇,引入鎖臀稚,帶來了性能損耗。Redis使用單線程的IO復用模型三痰,將速度優(yōu)勢發(fā)揮到最大吧寺,也提供了較簡單的計算功能?
內存管理方面:Memcached使用預分配的內存池的方式,帶來一定程度的空間浪費 并且在內存仍然有很大空間時散劫,新的數(shù)據也可能會被剔除稚机,而Redis使用現(xiàn)場申請內存的方式來存儲數(shù)據,不會剔除任何非臨時數(shù)據 Redis更適合作為存儲而不是cache?
數(shù)據的一致性方面:Memcached提供了cas命令來保證.而Redis提供了事務的功能获搏,可以保證一串 命令的原子性赖条,中間不會被任何操作打斷?