實際項目中是選用Map仍是選用Redis做爲緩存?爲何?

參考網頁

https://segmentfault.com/q/1010000009106416java

實際項目中是選用Map仍是選用Redis做爲緩存?爲何?

具體選擇Map仍是Redis做爲緩存,要看具體的需求,具體的應用場景

本地緩存和分佈式緩存

★本地緩存(如map和guava)輕量快速簡單,可是各個應用實例不可共享

緩存分爲本地緩存和分佈式緩存。以java爲例,使用自帶的map或者guava實現的是本地緩存,最主要的特色是輕量以及快速,生命週期隨着jvm的銷燬而結束,而且在多實例的狀況下,每一個實例都須要各自保存一份緩存,緩存不具備一致性。redis

★分佈式緩存結構複雜,可是能夠實現多個應用實例共享緩存

使用redis或memcached之類的稱爲分佈式緩存,在多實例的狀況下,各實例共用一份緩存數據,緩存具備一致性。缺點是須要保持redis或memcached服務的高可用,整個程序架構上較爲複雜。segmentfault

★實際應用

項目小而簡單、緩存數據量不大時,能夠應用map或者guava做爲緩存。緩存

分佈式系統中,多個應用實例共享緩存的場景下,則須要採用對分佈式緩存支持較好的redis等。架構

Redis和map做爲緩存的比較

緩存數據量--redis幾十G,map則要看jvm限制(幾個G就夠大了)

 Redis 能夠用幾十 G 內存來作緩存,Map 不行,通常 JVM 也就分幾個 G 數據就夠大了併發

生命週期--redis可持久化,map跟隨程序進程(jvm)    

Redis 的緩存能夠持久化,Map 是內存對象,程序一重啓數據就沒了jvm

對分佈式的支持

Redis 能夠實現分佈式的緩存,Map 只能存在建立它的程序裏分佈式

併發量--redis是專業的緩存服務,可處理每秒百萬級的併發

Redis 能夠處理每秒百萬級的併發,是專業的緩存服務,Map 只是一個普通的對象memcached

功能性--redis有豐富的API和緩存過時機制,map只是java中的一個對象

Redis 緩存有過時機制,Map 自己無此功能spa

Redis 有豐富的 API,Map 就簡單太多了

相關文章
相關標籤/搜索