Redis开发规范

前言:本文档根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。对于规约条目的延伸信息中,“说明”对内 容做了适当扩展和解释;“正例” 倡什么样的编码和实现方式;“反例”说明需要 防的雷区,以及真实的错误案例。

1.【强制】Redis的key定义为多个具有独立意义的字符串由冒号“:”拼接而成,在做MySQL数据表缓存时,“具有独立意义的字符串”强制定义为数据表的单个字段,并且将格式约定为:表名:字符串1:字符串2:·····。

说明:数据表的单个字段本身就是一个具有独立意义的字符串,在做Redis缓存时不再对该字符串做拆分、拼接。Redis在做其它存储用途时,可以通过拆分一个字符串、拼接多个字符串以及直接使用单个字符串等多种手段形成“具有独立意义的字符串”。

正例:话费黑名单存储在Redis中时,在功能上都可以的情况下,可以采用“configcache:fee:blacklist”作为key,也可以使用“configcache:feeblacklist”作为key,前者认为fee和blacklist分别是具有独立意义的字符串,后者认为feeblacklist是具有独立意义的字符串。

待讨论:使用何种机制保证key值的唯一性。

2.【强制】禁止使用Keys正则匹配操作,包括但不限于各种形式的模糊匹配操作。

说明:Redis是单线程处理,在线上KEY数量较多时,操作效率极低(时间复杂度为O(N)),该命令一旦执行会严重阻塞线上其它命令的正常请求,而且在高QPS情况下会直接造成Redis服务崩溃。

3.【强制】将对象写入Redis时使用fastToJson序列化方式。

说明:统一序列化方式。

4.【强制】避免多个应用使用同一个Redis实例

说明:redis是单线程作业,因此不要把多个应用放在一个redis实例,这样会降低每个业务的吞吐量,必要的时候一个应用我们也可以针对不用的功能点使用多个redis实例。

5.【推荐】程序需要处理如果redis数据丢失时的重新加载的过程。

6.【推荐】存储的Key尽可能设置超时时间。

说明:如果应用将Redis定位为缓存Cache使用,对于存放的Key要尽可能设置超时时间。因为若不设置,这些Key会一直占用内存不释放,造成极大的浪费,而且随着时间的推移会导致内存占用越来越大,直到达到服务器内存上限!另外Key的超时长短要根据业务综合评估,而不是越长越好。

待讨论1:什么样的时间比较合适。定义MySQL缓存的时间,其它场景按需设置。

7.【推荐】选择合适的数据类型,在不能确定其它复杂数据结构一定优于String类型时,避免使用Redis的复杂数据结构,复杂类型对象指的是hash,set之类的非string对象。

说明:每种数据结构都有相应的使用场景,String类型是Redis中最简单的数据类型,推荐使用String类型。但是考虑到具体的业务场景,综合评估性能、存储、网络等方面之后使用适当的数据结构。

8.【推荐】将一个Redis实例的所有操作集中封装在一个类中。

说明:Redis自由度非常大,key有各种各样的形式,将所有的操作集中在一个类中,便于管理。

9.【参考】尽可能使用不要超过1M大小的kv。

说明:如果将redis作为cache进行频繁读写和超时删除等,此时应该避免设置较大的k-v,因为这样会导致redis的 内存碎片增加,导致rss占用较大,最后被操作系统OOM killer干掉。参考值:flowsal中的order表,100条记录占用redis的内存为1.07M

10.【参考】如果出现频繁对string进行append操作,则请使用list进行push操作,取出时使用pop。这样避免string频繁分配内存导致的延时。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 转载地址:http://gnucto.blog.51cto.com/3391516/998509 Redis与Me...
    Ddaidai阅读 21,445评论 0 82
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 3,961评论 2 27
  • 蹉跎时光的土地 寸草不生 骸骨跪求天山的湖水 草纸是半滴眼泪 半滴眼泪 一个狭长的黑夜空洞 如此暗哑 鱼群潜行水底...
    红尘红尘阅读 229评论 2 3
  • 在那个转型的年代挣钱很容易 有了钱之后身边的朋友包括自己 花天酒地 陆续的妻离子散 至亲们也遭受着这样或那样的变故...
    释一舍阅读 404评论 0 1