原则 | 说明 |
简洁性 | 保证语义的前提下,可以适当缩短 Key 的长度。当 Key 较多时,Key 占用的内存空间也不容忽视。 |
命名规则 | 以英文字母开头,命名中只能出现大小写字母、数字、竖线、下划线、英文点号( .)和英文半角冒号(:)。 |
语义分割 | 不同业务逻辑含义使用英文半角冒号( :)分割,同一业务逻辑含义段的单词之间使用英文半角点号(.)分割,用来表示一个完整的语义。 |
可读性 | Key 名称以 Key 所代表的 Value 类型结尾,以提高可读性。例如: user:basic.info:userid:string。 |
长度限制 | Key 名称过大也会占用一定的内存空间,建议控制在128字节以内。 |
禁止特殊字符 | 禁止使用 \\、*、?、{}、[]、()、空格、单双引号和转义字符等,否则可能导致 Key 无法检索或检索失败。 |
示例 | 说明 |
cx:cxdb:user:000110011 | 简洁、语义清晰,使用冒号分层。 |
user:basic.info:userid:string | 同一语义段使用点号分割,以 Value 类型结尾。 |
示例 | 问题 |
cx:cxdb:cxdb_user_info:000110011 | 表名中重复包含库名 "cxdb",冗余且增加 Key 长度。 |
set user 000110011 | Key 中包含空格,属于禁止使用的特殊字符。 |
# 写入 Key> set cx:cxdb:user:000110011 xiaoming# 设置 Key 一小时后过期> expire cx:cxdb:user:000110011 3600
> object idletime cx:cxdb:user:000110011(integer) 150039 # 表示该 Key 有 150039 秒未被访问过
数据结构类型 | 大 Key 判定条件 | 问题说明 |
String | Value 值超过10MB。 | 数据值太大 |
Set | 成员数量超过10000个。 | 成员数量多 |
List | 成员数量超过10000个。 | 成员数量多 |
Hash | 成员数量超过1000个,且成员总 Value 值大小为1000MB。 | 成员总的体积过大 |
准则 | 说明 |
控制 Value 大小 | String 类型控制在10KB以内;Hash、List、Set、Zset 元素个数不要超过5000。 |
避免直接删除大 Key | 若非必须,不要使用 del 删除大 Key。 |
渐进式删除 | 对于非字符串的大 Key,建议使用 hscan、sscan、zscan 渐进式删除。 |
关注过期自动删除 | 防止大 Key 过期时间自动删除问题。例如一个200万的 Zset 设置1小时过期,会触发 del 操作,造成阻塞。 |
数据结构类型 | 适用场景 | 说明 |
字符串(String) | 简单的字符串数据,例如配置信息、计数器等 | 如果需要存储二进制数据,可以使用二进制安全字符串类型 |
哈希表(Hash) | 多个字段和值的数据,例如用户信息、商品信息等 | 可以节省内存空间,方便进行批量操作 |
列表(List) | 有序的元素集合,例如消息队列、任务列表等 | 支持在两端进行插入和删除操作 |
集合(Set) | 无序的元素集合,例如标签列表、好友列表等 | 支持并集、交集、差集等操作 |
有序集合(Sorted Set) | 有序的元素集合,例如排行榜、投票列表等 | 按照分值排序,支持范围查询 |
场景 | 建议 |
数据量较小且需要频繁遍历 | 适合使用 ziplist,内存利用率更高 |
数据量较大且需要频繁插入、删除或查找 | 不建议使用 ziplist,应考虑使用其他数据结构代替 |
set user:1:name tomset user:1:age 19set user:1:favor football
Operating System: Ubuntu 24.04.3 LTS / x86_64
Runtime Version: GNU bash, version 5.2.21(1)-release (x86_64-pc-linux-gnu)
hmset user:1 name tom age 19 favor football
文档反馈