如何做到阿里雲 Redis 開發規範中的拒絕 bigkey

業餘草發表於2019-02-27

點選上方“業餘草”,選擇“置頂公眾號”

第一時間獲取技術乾貨和業界資訊!

640?wx_fmt=png

 

程式碼中的問題,光靠 Code Review 是不夠的。Code Review 主要是解決規範問題,當然也能排查出一些 bug。

Code Review 適合技術驅動型團隊、公共服務型團隊、測試缺失型團隊、新人密集型團隊、任何有主觀意願的團隊。Code Review 活動主要圍繞下面 4 項工作開展。

640

說到程式碼規範,我們就不得不提阿里雲的 Redis 開發規範。這個規範寫的很好,想把我說的都總結了。需要這套規範的可以私信我,我發給你們。

其中有一條寫到:

640?wx_fmt=png

意思我們都懂,關鍵是這個 bigkey 不好掌握,使用著使用著 key 可能就變大了,不規範了。

那麼有沒有大 Key 檢測機制呢?答案當然有。阿里雲提供了一個大 Key 搜尋工具:https://yq.aliyun.com/articles/117042。原理其實就是和我們下面要將的內容類似。

因為有時候,我們的 BUG 就是無意直接產生的,bigkey 也有可能是你知識欠缺,缺乏考慮等原因造成的。因此,對於生產中的一些問題,我們還需要做到主動出擊,主動去觀察每個服務的健康狀況。下面我們就一起來看看如果提前發現 Redis 中使用不合理的大 Key。

redis-cli -h{ip} -p{port} bigkeys 命令就是幹這個事情的。該命令會對 redis 中的 key 進行取樣,尋找較大的 keys。是用的是 scan 方式,不用擔心會阻塞 redis 很長時間不能處理其他的請求。執行的結果可以用於分析 redis 的記憶體的只用狀態,每種型別 key 的平均大小。

例如當我執行:redis-cli -h 127.0.0.1 -p 7001  –bigkeys 後,會出現如下內容: 

640?wx_fmt=png

640

String 就是字串、Hash 就是雜湊、List 就是列表、Set 就是集合、zset(sorted set:有序集合)。

字串型別:一般認為超過 10k 的就是 bigkey,但是這個值和具體的 OPS 相關。

非字串型別:體現在雜湊,列表,集合型別元素過多。

bigkey 通常會導致記憶體空間不平衡,超時阻塞,如果 key 較大,redis 又是單執行緒,操作 bigkey 比較耗時,那麼阻塞 redis 的可能性增大。每次獲取 bigKey 的網路流量較大,假設一個 bigkey 為 1MB,每秒訪問量為 1000,那麼每秒產生 1000MB 的流量,對於普通千兆網路卡,按照位元組算 128M/S 的伺服器來說可能扛不住。而且一般伺服器採用單機多例項方式來部署,所以還可能對其他例項造成影響。

當你以為你會用 Redis 了,就可以找高薪工作了,但實際上會優化才重要!

原文連結:Redis 的大 Key 掃描 redis-cli -h{ip} -p{port} bigkeys 用法詳解

640

10T技術資源大放送!包括但不限於:C/C++,Linux,Python,Java,PHP,人工智慧,GO等等。在公眾號內回覆對應關鍵字或框架名字,即可免費獲取!!

640?wx_fmt=png

 你再主動一點點 640?  我們就有故事了

相關文章