開發平臺之緩存設計

上一篇《開發平臺之組織架構設計

背景

平臺里面有一些數據會經常被訪問,比如:菜單的鏈接、數據字典、常用配置等,而且不會發生頻繁的改動,這些數據都應該考慮加入緩存來優化查詢速度,避免頻繁地從數據庫直接查詢獲取。那在我們常見的應用中有哪些常見的緩存呢?

常見緩存

EhCache

Ehcache是一種廣泛使用的開源Java分布式緩存。主要面向通用緩存,Java EE和輕量級容器。它具有內存和磁盤存儲,緩存加載器,緩存擴展,緩存異常處理程序,一個gzip緩存servlet過濾器,支持REST和SOAP api等特點。

Memcache

Memcache是一個高性能的分布式的內存對象緩存系統,通過在內存里維護一個統一的巨大的hash表,它能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。簡單的說就是將數據調用到內存中,然后從內存中讀取,從而大大提高讀取速度。

Redis

Redis是一個key-value存儲系統。和Memcached類似,它支持存儲的value類型相對更多,包括string(字符串)、list(鏈表)、set(集合)、zset(sorted set --有序集合)和hash(哈希類型)。這些數據類型都支持push/pop、add/remove及取交集并集和差集及更豐富的操作,而且這些操作都是原子性的。在此基礎上,redis支持各種不同方式的排序。與memcached一樣,為了保證效率,數據都是緩存在內存中。區別的是redis會周期性的把更新的數據寫入磁盤或者把修改操作寫入追加的記錄文件,并且在此基礎上實現了master-slave(主從)同步。

緩存設計

上述介紹的都是幾種常用的緩存容器,但是在平臺的緩存設計上,我們更傾向于用接口的方式來使用,便于根據不同規模來切換不同的緩存容器。

在設計之前要說一句

無論何時何地,緩存與物理數據必須一致性。

核心設計

平臺緩存設計

通過采用AOP攔截代理方式,設計實現類似spring cache的方式來實現平臺的緩存,支持注解掃描和配置文件解析、以及手動設置緩存的方式。

類說明

CacheValueProcessor

方法攔截處理類,主要用來判定方法是否啟用緩存配置,從而進一步確認緩存的讀取或設置。此處采用責任鏈模式,用于對攔截的方法檢測是否啟用注解或文件配置中的方法。

IKeyParser

緩存key表達式解析類,一般數據緩存都有一些特別標識,有些可能來源于傳入的參數,比如:菜單(menu),組織(unit)、數據字典(dict、dict_xxxx),通過動態運算出某種特征的標識key。

IResultParser

緩存值解析類,不同的方法的返回值可能不一樣,比如:map、list、object或者其他自定義類,通過對緩存返回的結果做動態轉換為調用者可以接收的返回格式。

CacheAPI

緩存容器類,用來裝載緩存、寫入緩存、讀取緩存和移除緩存的關鍵緩存操作類,可以接入Encache、Jedis等緩存工具類。

基于這個設計,我的輕量級緩存:《Spring Boot 輕量級緩存 Ace-Cache

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容