關於Redis的Key

關於Redis的Key

在使用Redis時,建立一個好的Key是相當重要的。
以下先介紹官網對Key的一些描述和建議。

Redis官網對Key的描述和建議

1
2
3
4
5
1.不推薦使用非常長的Key:超過1024bytes效能會變差
2.使用原本Key的Hash值也是好方法
3.Key最好有可讀性,讓key設計不重覆 example: u200taiwan -> userid:200:taiwan
4.嘗試固定格式: :(分隔) , . 或 - (用於多個組合字元) exmaple: userid:200:taiwan:father-man
5.Key最大512MB

key命名設計

1
2
3
(1)可讀性和可管理性,以業務名(或資料庫名)為前綴(防止key衝突),用冒號分隔,比如業務名:表名:id
(2)簡潔性,在保證語義的前提下,控制key的長度,當key較多時,記憶體的使用率要注意
(3)不要包含特殊字符,example:包含空格、換行、單雙引號以及其他特殊符號

value設計

1
2
3
4
5
6
7
(1)拒絕bigkey,string類型控制在10KB以內,hash、list、set、zset元素個數不要超過5000。
example:一個包含200萬個元素的list。非字串的bigkey,不要使用del刪除,
使用hscan、sscan、zscan方式漸進式刪除,同時要注意防止bigkey過期時間自動刪除問題。
(2)選擇適合的資料結構
example:hmset user:1 name tom age 19 favor football
(3)控制key的生命周期,redis不是垃圾桶。
建議使用expire設置過期時間

命令使用

1
2
3
4
1.O(N)關注N的數量,example:hgetall、lrange、smembers、zrange、sinter等並非不能使用,但是需要明確N的值。有iterator的需求可以使用hscan、sscan、zscan代替。
2.禁用命令:禁止線上使用keys、flushall、flushdb等,通過redis的rename機制禁掉命令,或者使用scan的方式處理。
3.使用批量操作提高效率
原生命令:例如mget、mset。非原生命令:可以使用pipeline提高效率。要注意控制一次批量操作的元素個數(example:500以內,實際也和元素字節數有關)。