鄭昀 基於馬海元和閆小波的文檔
關鍵詞:
memcached
、redis、分佈式緩存、控制檯、反序列化、Java
本文檔適用人員:研發和運維員工
提綱:
- 如何查看緩存裏的序列化數據?
- 批量刪除來一個
- 監控每一個緩存端口的訪問狀況是頗有必要的
- discache 解決了這些問題
電商系統的分佈式緩存通常是 redis 和 memcached 集羣,每個節點上會起不少實例,由於一個業務類型對應於一個端口,拆分得很清楚。既然節點不少,端口不少,業務也在變化,隨時都有變更,如何管理呢?固然,最迫切的需求是下面這個,不解決的話就會很麻煩。
0x01.如何查看緩存裏的序列化數據?
Java 工程一般
把類實例對象序列化後存儲在緩存裏。其次,不一樣端口存的類對象還不同。最後,類對象還有版本之分,你手頭不見得有正確的線上版本 class 文件來反序列化。
總之,當你想看看鍵值裏存的是什麼內容時,會很是麻煩,因此咱們迫切須要一個系統。
0x02.批量刪除來一個
有時候線上緩存數據想按某個規則刪掉一批,沒有一個趁手的工具的話,那遇到急茬兒事還真是手忙腳亂,尤爲是有時候上線預熱數據預熱錯了的時候。假如能按照某個通配符規則批量刪除,善莫大焉。
0x03.監控每一個緩存端口的訪問狀況是頗有必要的
慢日誌:
redis 支持各類數據結構,還支持模糊查詢,因此容易在線上出現慢查詢。所以,有一個慢查監控仍是很能發現問題的。
指令執行狀況:
緩存的指令處理速度、內存使用狀況、DB Size 等等,這些能實時觀測也是最好。
0x04.discache 解決了這些問題
2014年,在張鑫和閆小波的努力下,discache 如期發佈,也歸入到了 IdCenter 體系下。
什麼是 discache?
窩窩主站的分佈式緩存管理平臺,由
節點管理、數據查詢、基本信息和慢日誌四部分功能組成的。
入口在這裏:
圖1 idcenter的主界面
discache 主界面長這樣:
圖2 discache節點管理界面
你能夠按關鍵詞搜索節點名稱:
圖3 按order關鍵詞搜索全部分佈式緩存節點
來,我們看看慢日誌。
找到對應節點後,點擊那個黃色操做按鈕。
圖4 某個節點的慢日誌
慢日誌列表也是能夠搜索的。
上圖裏的用時爲何這麼慢呢?這些請求都是 redis 模式匹配式的指令,數據量大的狀況下響應時間確實比 get 單個 key 要多不少。
再來看看基本信息,也就是實時監控:
圖5 某個節點的實時監控信息
選好某個節點後,頁面會一直更新數據。
discache 如何解決最根本的需求:反序列化鍵值
選擇某個緩存節點,輸入 key 名,支持通配符查詢,如「*index*」、「g_*」等,若是以前有人已經上傳過 CLASS 文件,則點擊某個 key 能夠直接展現 value 內容,不然須要上傳一個 CLASS 文件來反序列化。
圖6 key 模糊搜索和反序列化
如上圖所示,還展現了某個 key 的過時時間。還支持gzip解壓縮功能,支持多種反序列化方式,以下圖所示。
圖7 序列化下拉列表
注意,能夠點擊「所有刪除」按鈕將搜到的鍵值都刪掉。
好了,咱們上面演示了對某個分佈式緩存節點的鍵值查詢、批量刪除和單個刪除、慢日誌、實時監控。discache 大大提高了窩窩項目中緩存管理效率。
下面大體說一下查詢的工做原理:
把緩存查詢轉換成 memacache 或 redis 的一組命令來實現,redis 有各類數據結構,那麼每種存儲結構的查詢指令都不同,界面設計中只須要輸入指定的 key 值,在底層 java 實現中會嘗試各類查詢指令,直到查詢到正確值爲止。
-EOF-