使用純java的ehcache做爲本地緩存java
Reids 做爲遠程分佈式緩存redis
解決redis緩存壓力過大,提升緩存速度,以及緩存性能。緩存
若是是單個應用或者對緩存訪問要求很高的應用,用ehcache。
若是是大型系統,存在緩存共享、分佈式部署、緩存內容很大的,建議用redis。服務器
使用redis的發佈與訂閱來實現緩存更新廣播,本地緩存存放更新頻率低,但請求量很高的數據,對於更新頻率很高的數據應該由redis緩存來承擔。架構
當某臺服務器的本地緩存更新的時候,經過redis發佈與訂閱機制發佈該key的更新信息,其餘服務器監聽到key的更新信息則更新本地緩存的key分佈式
具體實現性能
經過註解方式標明該方法時候使用緩存,緩存的超時時間,是否開啓本地緩存,若是開啓本地緩存則當更新緩存時,先更新本地緩存和redis緩存,而後經過redis發佈更新廣播,其餘服務器接收到該key的更新信息則更新本地緩存spa
若是添加類型的更新則本地緩存新建key而後查詢redis的key將value同步到本地緩存內存
若是修改類型的更新則查詢redis緩存而後將value同步到本地緩存。部署
若是刪除類型的更新則刪除本地緩存的key和value。
考慮的本地緩存和服務器緩存要保證數據的一致性,防止因各類緣由致使因廣播信息沒有接收到或者其餘緣由本地緩存沒有更新特加入定時更新策略。
定時更新是在廣播更新的基礎上在本地緩存加入超時時間,若是超過多長時間沒有接收到更新廣播,則清除本地緩存的key(設置超時時間),來保證緩存的最終一致性。
緩存注意點
本地緩存必須設置超時時間,必須定時更更新本地緩存,防止因各類緣由致使的本地緩存和redis緩存不一致,保證緩存的一致性。
redis緩存不該該設置永久緩存,防止因更新失敗致使的緩存不一致,以及殭屍類型的key佔用服務器內存(一些系統配置級別的能夠設置永久緩存,如系統配置,基本上不會進行更新的或者更新頻率很低的)
注意
項目啓動時要清空本地與服務器同步的緩存區域,以保證緩存的一致性。
架構流程圖
單節點架構圖
多節點架構圖