专栏首页用户7890857的专栏Redis 开发常用规范
原创

Redis 开发常用规范

使用规范

1、冷热数据分离,不要将所有数据全部都放到Redis中

虽然Redis 支持持久化,但是Redis的数据存储全部都是在内存中,成本昂贵。建议根据业务场景只将高频热数据存储到Redis 中,其他低频数据可以使用es、mongoDb等存储方式,不仅节省内存成本,而且数据量小操作速度更快,效率更高。

2、不同的业务数据要分开存储

不相关的业务数据不要集中放到一个Redis实例中,建议新业务申请新的单独实例。Redis单线程处理,独立存储会减少不同业务互相操作的影响,提高请求响应速度;同时也避免单个实例内存数据量膨胀过大,在出现异常情况时可以更快恢复服务。

3、键值设计

规范Key的格式,合适的key,便于查看,统计,排错。其好处如下:

1、能够根据某类key进行数据清理

2、能够根据某类key进行数据更新

3、能够方便了解某类key的归属方和应用场景

4、为统一化、平台化做准备,减少技术变更

一般,一个 key 需要带以下维度:业务、key 用途、变量等,各个维度使用 : 进行分隔。

4、控制key的生命周期,redis不是垃圾桶

如果将redis定位为缓存Cache使用,对于存放的key一定要设置超时时间!因为不设置,这些key会一直占用内存不释放,造成极大的浪费,而且随着时间的推移会导致内存占用越来越大,直到达到服务器内存上限。 同时条件允许的情况下随机打散过期时间,防止集中过期。

5、对于必须要存储的大文本数据一定要压缩后存储

大文本【超过500字节】写入到redis时,一定要压缩后存储!大文本数据存入redis,除了带来极大的内存占用外,在访问量高时,很容易将网卡流量占满,造成整个服务器上的所有服务不可用,并引发雪崩效应,造成各个系统瘫痪。

6、连接数限制

连接的频繁创建和销毁,会浪费大量的系统资源,极限情况下会造成宿主机宕机。确保正确使用Redis客户端连接池配置。

操作限制

1、严禁使用keys

Keys 命令效率极低,属于 O(N)操作,会阻塞其他正常命令,在 cluster 上,会是灾难性的操作。严禁使用,DBA 应该 rename 此命令,从根源禁用。

2、严禁使用Flush

flush 命令会清空所有数据,属于高危操作。严禁使用,DBA 应该 rename 此命令,从根源禁用,仅 DBA 可操作。

3、严禁作为消息队列使用

没有非常特殊诉求,严禁将redis当作消息队列使用。redis当消息队列使用,会有容量、网络、效率、功能方面的多种问题。

4、严禁不设置范围的批量操作

redis 那么快,慢查询除了网络延迟,就属于这些批量操作函数。大多数线上问题都是由于这些函数引起。

1、[zset] 严禁对 zset 的不设范围操作

2、[hash] 严禁对大数据量 Key 使用 HGETALL

3、[key] Redis Cluster 集群的 mget 操作

4、[其他] 严禁使用 sunion, sinter, sdiff等一些聚合操作

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

关注作者,阅读全部精彩内容

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Redis开发常用规范

    虽然Redis支持持久化,但是Redis的数据存储全部都是在内存中的,成本昂贵。建议根据业务只将高频热数据存储到Redis中【QPS大于5000】,对于低频冷数...

    lyb-geek
  • Redis 开发常用规范

    虽然Redis 支持持久化,但是Redis的数据存储全部都是在内存中,成本昂贵。建议根据业务场景只将高频热数据存储到Redis 中,其他低频数据可以使用es、m...

    用户8679488
  • Redis开发规范

    以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id

    业余草
  • Redis使用规范

    会跳舞的机器人
  • 1.开发规范-- 常用的版本控制

    #常用的版本控制# ##前言## 这里版本控制是经过笔者在项目中实践总结得出的,有比较广的适用范围, 当然也要根据不同的业务有取舍应为笔者水平有限,其中有不足的...

    喵了个咪233
  • 28个Java开发常用规范技巧总结

    例如:UserService,但是以下情景例外:DO / BO / PO / DTO / VO。

    用户1516716
  • 前端开发规范之命名规范、html规范、css规范、js规范

    在学习编程的时候,每次看到那些整齐规范的代码,心里顿时对这个程序员表示点点好感,有时,比如看到自己和朋友写的代码时,那阅读起来就是苦不堪言,所以,一些基本的开发...

    IMWeb前端团队
  • Golang命名规范和开发规范

    文件命名一律采用小写,不用驼峰式,尽量见名思义,看见文件名就可以知道这个文件下的大概内容。 其中测试文件以test.go结尾,除测试文件外,命名不出现。

    rectinajh
  • 开发规范 | 代码审核规范

    commit message 都包含三个部分:Header(必需)、Body(可选)、Footer(可选)

    双鬼带单
  • mysql开发规范

    命名规范 库名、表名、字段名必须使用小写字母,并采用下划线分割 库名、表名、字段名禁用超过32个字符。须见名知意 库名、表名、字段名禁用使 MySQL保留字 临...

    lestat
  • MySQL开发规范

    1)    使用InnoDB存储引擎 2)    数据库字符集使用UTF8,校对字符集使用utf8_general_ci 3)    所有表、字段都尽量添加注释...

    动力节点Java培训
  • SDK 开发规范

    陈雨尘
  • vue 开发规范

    组件名为多个单词,并且用连接线(-)连接,避免与 HTML 标签冲突,并且结构更加清晰。

    java攻城狮
  • MySQL开发规范

    索引是一把双刃剑,它可以提高查询效率但也会降低插入和更新的速度并占用磁盘空间

    用户7657330
  • 前端开发规范

    使用不带BOM的UTF-8编码 在HTML中指定编码<meta charset="utf-8">; 无需使用@charset指定样式表编码,它默认为UTF-...

    余生
  • 开发流程规范

    这是近期在公司做的一次分享,这几年的互联网开发,算比较幸运,团队一直践行完善这套规范,没有太多的阻碍,得益于公司整体氛围,以及团队对规范和写文档的不排斥,形成了...

    码农戏码
  • 前端开发规范

    省略外链资源(图片及其它媒体资源)URL 中的 http / https 协议,使 URL 成为相对地址

    PM吃瓜
  • SAP Spartacus 开发规范

    某些违反准则的行为可以通过一个名为 codelyzer 的工具自动检测,该工具与 Angular CLI 捆绑在一起。 您可以使用以下命令分析 angular ...

    Jerry Wang
  • Java开发编程规范: 2.常量定义

         1)跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下。

    花狗Fdog

扫码关注云+社区

领取腾讯云代金券