阿里內部強制執行的Redis規範,違者績效直接3.25 Redis規範 二.命令使用

Redis規範

一:鍵值設計

1.key 名設計

(1)可讀性和可管理性

        以業務名(或數據庫名)爲前綴(防止key衝突),用冒號分隔,比如業務名:表名:id

(2)簡潔性

        保證語義的前提下,控制key的長度,當key較多時,內存佔用也不容忽視,例如:

        不要包含特殊字符

        反例:包含空格、換行、單雙引號以及其他轉義字符

2.value設計

    (1)拒絕 bigkey(防止網卡流量、慢查詢)

    (2)string類型控制在10KB以內,hash、list、set、zset元素個數不要超過5000。

    (3)非字符串的bigkey,不要使用del刪除,使用hscan、sscan、zscan方式漸進式刪除,同時要注意防止bigkey過期時間自動刪除問題(例如一個200萬的zset設置1小時過期,會觸發del操作,造成阻塞,而且該操作不會不出現在慢查詢中(latency可查)),查找方法和刪除方法

    (4)選擇適合的數據類型。例如:實體類型(要合理控制和使用數據結構內存編碼優化配置,例如ziplist,但也要注意節省內存和性能之間的平衡)

    (5)控制key的生命週期,redis不是垃圾桶,建議使用expire設置過期時間(條件允許可以打散過期時間,防止集中過期),不過期的數據重點關注 idletime。

二.命令使用

1. O(N)命令關注N的數量

    例如hgetall、lrange、smembers、zrange、sinter等並非不能使用,但是需要明確N的值。有遍歷的需求可以使用hscan、sscan、zscan代替。

2. 禁用命令

禁止線上使用keys、flushall、flushdb等,通過redis的rename機制禁掉命令,或者使用scan的方式漸進式處理。

其他 Redis 使用規範可參考運維文檔:

附:大廠內部Redis使用規範 && 經典技術資料論壇(可微信充值下載)

歡迎添加筆者微信:mingyuan_2018,交流各種技術問題

最後附上筆者創建的一個java技術交流羣,歡迎大家進羣交流java相關的技術,羣主會不定時發紅包,組織抽獎,獎品是下面幾本書之一:

從paxos到zookeeper分佈式一致性原理與實踐    作者:倪超

Redis設計與實現    作者:黃建宏

kafka源碼分析 

分佈式系統架構設計與實現

高性能mysql

Innodb引擎原理分析

還有幾本,篇幅限制就不一一列舉了

![image.png](https://upload-images.jianshu.io/upload_images/5931028-fc758cace9fd74cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章