redis key 命名规范的设计

Redis key 命名需具有可读性以及可管理性,不该使用含义不清的 key 以及特别长的 key 名;

一、实现目标

简洁,高效,可维护

二、键值设计规约

1 Redis key 命名风格

【推荐】Redis key 命名需具有可读性以及可管理性,不该使用含义不清的 key 以及特别长的 key 名;

强制】以英文字母开头,命名中只能出现小写字母、数字、英文点号 (.) 和英文半角冒号(:);

强制】不要包含特殊字符,如下划线、空格、换行、单双引号以及其他转义字符;

2 、命名规范

强制】命名规范:业务模块名: 业务逻辑含义: 其他: value 类型

1 )业务模块名:具体的功能模块

2)逻辑含义段:

强制】不同业务逻辑含义使用英文半角冒号 (:) 分割,

【强制】同一业务逻辑含义段的单词之间使用英文半角点号 (.) 分割,用来表示一个完整的语义

3)value 类型:

【强制】Redis key 命名以 key 所代表的 value 类型结尾,以提高可读性;

示例:user:basic.info:{userid}:string

3 value 设计

强制】:拒绝 bigkey(防止网卡流量、慢查询)。

String 类型控制在 10KB 以内,Hash、List、Set、ZSet 元素个数不要超过 5000。

三、业务规范

1、【强制】使用 Redis 进行缓存时,必须进行申请。申请之前,需要拿出使用的合理方案,然后进行评估,避免随意使用。

2、【强制】Redis 应用场景应该是纯缓存服务,功能主要是缓存数据,缓存数据可丢失,除特殊需求外,需提供可行性、可实施的方案。

3、【强制】 关于过期时间

Redis key 一定要设置过期时间。要跟自己的业务场景,需要对 key 设置合理的过期时间。可以在写入 key 时,就要追加过期时间;也可以在需要写入另一个 key 时,删除上一个 key。

说明:

(1) 若不设置的话,这些 key 会一直占用内存不释放,随着时间的推移会越来越大,直到达到服务器的内存上限,导致服务器宕机等重大事故;

(2) 对于 key 的超时时长设置,可根据业务场景进行评估,设置合理有效期;

(3) 某些业务的确需要长期有效,可以判断即将到期时,重新设置有效期,避免引起热点 key 问题。

4、【推荐】Redis 的使用,应该考虑冷热数据分离,不该将所有数据全部放到 Redis 中,对于使用不频繁,且无关紧要的信息存入 MySQL,或日志文件中,Redis 的数据存储全部都是在内存中的,成本昂贵。

5、【推荐】Redis 有数据丢失风险,程序处理数据时,应该考虑丢失后的重新加载过程。

6、【强制】禁止大 key

大 key 数据存⼊ Redis,除了带来极大的内存占用外,在并发高时,很容易就会将网卡流量占满,进而造成整个服务器上的所有服务不可用。虽然 Redis 支持 512MB 大小的 string,但是假设 1mb 的 string 大 key,每秒重复写入 10 次,就会导致写入网络 IO 达 10MB;

(1) 读写大 key 会导致超时严重,网卡流量占满, 甚至阻塞服务, 更甚者导致宕机风险。

(2) 如果删除大 key,DEL 命令可能阻塞 Redis 进程数十秒,使得其他请求阻塞,对应用程序和 Redis 集群可用性造成严重的影响。

(3) 每个 key 不要超过 10Kb。

7、【强制】Redis 一定不可使用 Keys 正则匹配操作。

8、【推荐】选择合适的数据类型。

目前 Redis 支持的数据库结构类型较多:字符串(String),哈希(Hash),列表(List),集合(Set),有序集合(Sorted Set), Bitmap, HyperLogLog 和地理空间索引(geospatial)等, 需要根据业务场景选择合适的类型。

在不能确定其它复杂数据结构⼀定优于 String 类型时,避免使用 Redis 的复杂数据结构。 每种数据结构都有相应的使⽤场景,String 类型是 Redis 中最简单的数据类型,建议使用 String 类型。 但是考虑到具体的业务场景,综合评估性能、存储网络等方面之后使用适当的数据结构。 需要根据业务场景选择合适的类型,常见的如:String 可以用作普通的 K-V、简单数据类类型等;Hash 可以用作对象如居民、医生等,包含较多属性的信息;List 可以用作息队列、医生同行 / 关注列表等;Set 可以用于推荐;Sorted Set 可以用于排行等。

9、【推荐】关于集合类操作

出现问题最多的就是超时问题,因为使用了 O(N) 的操作,导致服务超时,甚至服务不可用。

使用 Set,Zset,List,Hash 等集合类的 O(N) 操作时要评估当前元素个数的规模以及将来的增长规模,对于短期就可能变为大集合的 key,要预估 O(N) 操作的元素数量,避免全量操作,可以使用 HSCAN,SSCAN,ZSCAN 进行渐进操作。集合元素数量过大在使用过程中会影响 Redis 的实际性能,Hash 类元素个数建议尽量不要超过 100,集合类、链表类数据尽量不要超过 10k。元素数量过大可考虑拆分成多个 key 进行处理。

写到最后:

如果您有好的建议和想法,欢迎留言,我会继续完善文档,提高文档输出质量。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350