Redis規(guī)范
一:鍵值設(shè)計
1.key 名設(shè)計
(1)可讀性和可管理性
? ? ? ? 以業(yè)務(wù)名(或數(shù)據(jù)庫名)為前綴(防止key沖突)吏垮,用冒號分隔,比如業(yè)務(wù)名:表名:id
(2)簡潔性
? ? ? ? 保證語義的前提下宪躯,控制key的長度乔宿,當(dāng)key較多時,內(nèi)存占用也不容忽視访雪,例如:
? ? ? ? 不要包含特殊字符
? ? ? ? 反例:包含空格详瑞、換行、單雙引號以及其他轉(zhuǎn)義字符
2.value設(shè)計
? ? (1)拒絕 bigkey(防止網(wǎng)卡流量臣缀、慢查詢)
? ? (2)string類型控制在10KB以內(nèi)坝橡,hash、list精置、set计寇、zset元素個數(shù)不要超過5000。
? ? (3)非字符串的bigkey脂倦,不要使用del刪除番宁,使用hscan、sscan赖阻、zscan方式漸進(jìn)式刪除蝶押,同時要注意防止bigkey過期時間自動刪除問題(例如一個200萬的zset設(shè)置1小時過期,會觸發(fā)del操作火欧,造成阻塞棋电,而且該操作不會不出現(xiàn)在慢查詢中(latency可查)),查找方法和刪除方法
? ? (4)選擇適合的數(shù)據(jù)類型苇侵。例如:實(shí)體類型(要合理控制和使用數(shù)據(jù)結(jié)構(gòu)內(nèi)存編碼優(yōu)化配置,例如ziplist赶盔,但也要注意節(jié)省內(nèi)存和性能之間的平衡)
? ? (5)控制key的生命周期,redis不是垃圾桶榆浓,建議使用expire設(shè)置過期時間(條件允許可以打散過期時間于未,防止集中過期),不過期的數(shù)據(jù)重點(diǎn)關(guān)注 idletime。
二.命令使用
1. O(N)命令關(guān)注N的數(shù)量
? ? 例如hgetall沉眶、lrange打却、smembers、zrange谎倔、sinter等并非不能使用柳击,但是需要明確N的值。有遍歷的需求可以使用hscan片习、sscan捌肴、zscan代替。
2. 禁用命令
禁止線上使用keys藕咏、flushall状知、flushdb等,通過redis的rename機(jī)制禁掉命令孽查,或者使用scan的方式漸進(jìn)式處理饥悴。
其他 Redis 使用規(guī)范可參考運(yùn)維文檔:
附:大廠內(nèi)部Redis使用規(guī)范 && 經(jīng)典技術(shù)資料論壇(可微信充值下載)
歡迎添加筆者微信:mingyuan_2018,交流各種技術(shù)問題
最后附上筆者創(chuàng)建的一個java技術(shù)交流群盲再,歡迎大家進(jìn)群交流java相關(guān)的技術(shù)西设,群主會不定時發(fā)紅包,組織抽獎答朋,獎品是下面幾本書之一:
從paxos到zookeeper分布式一致性原理與實(shí)踐? ? 作者:倪超
Redis設(shè)計與實(shí)現(xiàn)? ? 作者:黃建宏
kafka源碼分析?
分布式系統(tǒng)架構(gòu)設(shè)計與實(shí)現(xiàn)
高性能mysql
Innodb引擎原理分析
還有幾本贷揽,篇幅限制就不一一列舉了
![image.png](https://upload-images.jianshu.io/upload_images/5931028-fc758cace9fd74cc.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)