新聞
首頁 >  神州信息新聞 >  數字中國·星火文集 | 應用程序緩存服務的實現

數字中國·星火文集 | 應用程序緩存服務的實現

  • 發布時間:2022-06-21
  • 來源:
  •   
  • 打印

應用程序緩存服務的實現

神州控股

李小非

我們軟件開發人員經常會遇到這樣的情況。當業務累積的數據量越來越大時,打開有大量元素的頁面或者大批量數據業務邏輯處理,如果沒有緩存,感覺頁面十分卡頓,用戶體驗很差,這個時候往往就要上緩存,來改善用戶體驗了。下面我把使用緩存的一些經驗跟大家做個分享。

緩存就像是業務系統的潤滑劑,它能讓系統運行更加順暢。那么哪些數據需要緩存起來呢?每個系統都有字典型數據,這類數據的特點是不常變更,數據量基本也是恒定的,在前后臺程序處理中訪問頻率極高,這類是必須緩存的數據,直接緩存在內存中效果更佳。另外還有基礎數據,修改頻率相對低,但數據量不斷的在增加,個別情況下會爆增,頁面和代碼處理中訪問頻率也極高,根據訪問頻率此類數據也需要緩存,但因為可能會出現爆炸式增長,放入內存可能會導致內存溢出,怎么辦呢?解決此問題不得不提緩存實現的有兩種方式:內存緩存和集中式緩存。

● 內存緩存是緩存數據直接放在內存中,這種方式訪問速度快性能最佳,缺點是緩存數據量過大時容易導致內存溢出,分布式環境中需要設計緩存刷新機制來規避臟數據問題。目前比較成熟的內存緩存框架有Caffine Cache,Ehcache,Guava Cache等。

● 集中式緩存是緩存服務端單獨部署,分布式環境中各應用通過網絡獲取緩存,這種緩存方式性能不如內存緩存,但緩存不占用應用服務器內存空間,數據集中存放,緩存的清除和更改時也不會出現各個應用獲取到的數據不一致的情況。目前大多數應用使用Redis,Memcache做緩存中間件。

經過實踐,我們根據內存緩存和集中式緩存的優缺點,我們通常會使用Redis+Caffine Cache來實現緩存服務。服務包含緩存配置維護,緩存數據維護,緩存自動加載,緩存自動更新。

● 新增緩存配置微服務,此服務配置緩存的過期策略,內存緩存最大數據量,緩存級別(集中式緩存,內存緩存和混用)等

● 緩存數據維護:添加查看和清除緩存的頁面,方便運維手動數據庫修改數據后,刷新緩存。

● 緩存獲取根據配置緩存級別判斷是否啟用內存緩存和集中式緩存。緩存數據獲取流程如下:

● 緩存自動加載

重新定義緩存數據加載接口,支持批量自動加載緩存。在沒獲取到緩存數據的時候,服務會自動從數據庫加載,一行應用代碼就能獲取到需要的數據。

● 緩存自動更新

應用數據被修改時,通過Redis的發布訂閱功能通知各應用,應用自動清空內存緩存和集中式緩存。

另外,緩存使用起來之后,要注意下面這些點:

1、使用內存緩存,需要注意內存溢出,內存緩存數不不易配置過大

2、分布式環境中下使用內存緩存,需要考慮同步措施,避免出現不同集群緩存數據不一致的情況。

3、集中式緩存使用時需要考慮到網絡和序列化開銷。

4、集中式緩存需要考慮單點問題,必要時需要考慮搭建集中式緩存集群,避免單點故障和網卡流量被占滿的情況。

5、使用中需要監測緩存命中率,命中率低的數據沒必要使用緩存

6、緩存的粒度越小越好,粒度越小命中率越高

以上就是我日常使用緩存技術的一些感悟,不足之處,請大家指正。

聯系我們