幾乎所有後端應用都會或多或少用到緩存,尤其是分佈式緩存服務,以及和本地緩存構造的二級緩存。根據我們一貫的節約代碼的風格,爲了複用的目標,抽象出緩存平臺,進行緩存管理。
考慮到很多公司都會自己造或者直接拿來主義使用各種各樣的開源緩存輪子,本文介紹的就簡單一點,聊下主要思路和實現思想就行,咩哈哈。
環境準備
1、(必須).Net Framework4.5+
2、(必須)關係型數據庫MySQL或SqlServer或PostgreSQL或MariaDB四選一
3、(必須)PowerDotNet數據庫管理平臺,主要使用DBKey功能
4、(必須)PowerDotNet配置中心Power.ConfigCenter
5、(必須)PowerDotNet註冊中心Power.RegistryCenter
6、(必須)PowerDotNet基礎數據平臺Power.BaseData
7、(必須)PowerDotNet人員管理平臺Power.HCRM,後續文章詳細介紹
8、(必須)Redis
一、分佈式緩存
PowerDotNet默認支持的分佈式緩存是Redis(參考了CacheCloud,但是和它管理緩存的思路不完全一樣,PowerDotNet的緩存設計主要是基於“分區”的分組複用),並可以繼續抽象,預留擴展接口,後續可以支持更多分佈式緩存選型,比如Memcached等。
1、Redis集羣
2、Redis服務器
針對集羣中的每臺緩存服務器,可以精準定位,處理緩存。
管理系統支持一些常見的緩存設置場景,如查詢、刪除、添加、統計。
比如常見的查看鍵值對:
查看詳細(含TTL):
再比如說添加,支持Redis的5大基本類型string、list、set、zset和hash:
管理後臺很大程度上完全可以替代一些分佈式緩存管理客戶端軟件。
注意,如果使用了cachecloud,集羣可從cachecloud數據表machine_room表同步過來,服務器可從cachecloud數據表machine_info和server同步過來,如何同步,在PowerDotNet中數據同步平臺是最好的選擇。
3、緩存分組
對於大中型企業來說,分佈式緩存經常需要按照業務團隊進行分組管理。
PowerDotNet完美支持按照系統和應用進行緩存Route綁定,做到按組管理。
先定義CacheRoute,一個CacheRoute等同於一個緩存分組:
將CacheRoute綁定到具體應用,這樣業務系統只要調用封裝好的公共SDK(分佈式緩存客戶端SDK命名爲Power.Cache)就能自動獲取分佈式緩存能力,甚至不用寫任何配置,直接在配置中心,點點按鈕搞定一切,實在是太省心了。
二、二級緩存
在配置中心進行配置,就可以順利實現如下五種組合:
1、僅本地緩存
2、本地緩存加分佈式緩存構成二級緩存,本地緩存優先
3、僅分佈式緩存
4、本地緩存加分佈式緩存構成二級緩存,分佈式緩存優先
5、不開啓任何緩存
不過第5種建議不要用,引入公共緩存組件做無用功也太沒意思,咩哈哈,想的太周到了,這都是多年業務開發經驗總結啊。
有了緩存平臺,緩存管理更加人性化,排查和定位問題更加方便。
當然,Redis的部署、運維和遷移更是重中之重,哪怕用了cachecloud,還是會有團隊遇到Redis各種使用問題。
根據個人所在公司的經驗,緩存常見的幾種問題排查下來,基本都是大規模集羣下配置或者參數設置使用不當,或者緩存客戶端沒有做好,雖然絕大多數情況下都是運維背鍋,作爲核心開發人員也要認清使用好Redis非常不容易,Redis作爲基礎設施,一出問題幾乎都是大問題,這都是真實經驗教訓。
參考:
https://github.com/sohutv/cachecloud
http://www.redis.cn/commands.html
https://github.com/sripathikrishnan/redis-rdb-tools
https://stackexchange.github.io/StackExchange.Redis