Redis 是一个开源的高性能的 Key-Value 数据库,本文介绍了使用 Redis 时的开发规范,从键值设计、命令使用等方面进行说明,通过本文的介绍可以减少使用 Redis 过程中带来的问题。

1.键值设计铁律

- 铁律 Level 备注
key 以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id;
保证语义的前提下,控制key的长度;
不要包含特殊字符(空格、换行、单双引号以及其他转义字符)。
强制
value 禁止bigkey(防止网卡流量、慢查询),string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000;
非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中(latency可查)),查找方法和删除方法
强制
生命周期 建议使用expire设置过期时间(条件允许可以打散过期时间,防止集中过期),不过期的数据重点关注idletime。 推荐

2.命令使用铁律

- 铁律 Level 备注
O(N)命令关注N的数量 例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。
禁用命令 禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。
合理使用select redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。
使用批量操作提高效率 原生命令:例如mget、mset。非原生命令:可以使用pipeline提高效率。但要注意控制一次批量操作的元素个数(例如500以内,实际也和元素字节数有关)。
注意两者不同:
1.原生是原子操作,pipeline是非原子操作;
2.pipeline可以打包不同的命令,原生做不到;
3.pipeline需要客户端和服务端同时支持。
Redis事务功能较弱,不建议过多使用 Redis的事务功能较弱(不支持回滚),而且集群版本(自研和官方)要求一次事务操作的key必须在一个slot上(可以使用hashtag功能解决)
Redis集群版本在使用Lua上有特殊要求 1.所有key都应该由 KEYS 数组来传递,redis.call/pcall 里面调用的redis命令,key的位置,必须是KEYS array, 否则直接返回error,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS arrayrn";
2.所有key,必须在1个slot上,否则直接返回error, “-ERR eval/evalsha command keys must in same slotrn”
monitor命令 必要情况下使用monitor命令时,要注意不要长时间使用。

Redis 数据库铁律相关推荐

  1. mysql复数记录,MySQL 数据库铁律(小结)

    好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 - 铁律 Level 备注 字符集 使用 utf-8 ...

  2. MySQL 数据库铁律

    好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 - 铁律 Level 备注 字符集 使用 utf-8 ...

  3. 【MySQL】MySQL 数据库设计铁律

    好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 2.建表铁律 设置合适的字符存储长度,不但可以节约数 ...

  4. MySQL 数据库运用铁律

    规矩成方圆,造化钟神秀.在MySQL数据库的运用中也一定要遵守一定的铁律,才能减少开发过程中产生的一些不必要的问题,本文主要讲述在建库建表.建索引.SQL.ORM 映射等方面的处理约定. 1. 建库铁 ...

  5. MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?

    今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...

  6. SQL Server索引管理之六大铁律

    GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...

  7. redis mysql查询数据类型_linux 常见的标识与Redis数据库详解

    xxx@xxx:~$ : 第一个 xxx 只的是 用户名 第二个 xxx 代表的是 HOST主机 ~ : 当前用户的根, 根的位置在 /home/用户名 $ : 代表当前用户是一个普通用户 # : 代 ...

  8. Redis数据库设置密码

    Redis数据库的默认打开方式为无密码打开,现在要将其设置为以密码形式打开. Redis文件夹内容 1.修改配置文件 在redis.windows.conf文件中设置密码的命令中添加requirepa ...

  9. 彻底取代Redis+数据库架构,京东618稳了!

    作者介绍 京东零售在线存储部,致力于分布式系统.开源数据库技术的研究,主要负责数据库性能调优.监控和架构设计. 过去十年,随着移动互联网指数级的增长,企业和用户对应用程序的响应性能要求越来越高, 如何 ...

最新文章

  1. Android 动画(二)
  2. [计数排序]统计三个数和的[最大概率](洛谷P2911题题解,Java语言描述)
  3. 【P20】PCM1794全平衡解码模块电路
  4. Android开发中验证码的生成
  5. Trustzone OP-TEE 在QEMU平台上的编译、运行与测试
  6. 在线旅游网站技术讲解
  7. 直线分割平面的公式_几种分割平面问题 | 学步园
  8. 时光不负,对我来说不寻常的一年 | 2021 年终总结
  9. amr文件怎么转换成mp3
  10. 计算机课堂小游戏活跃气氛,活跃气氛的70个小游戏 比较嗨的暖场游戏
  11. 二舅治好我的精神内耗,也让我火出了B站
  12. uniapp小程序唤醒微信支付
  13. php将文本文件中的内容呈现到一个表格中
  14. Python之pandas库--基础
  15. java操作MangoDB的聚合Aggregation用法-分页查询
  16. jquery.photoClip.js图片上传插件带拖动裁剪
  17. 2006中国商业网站100强 《互联网周刊》
  18. app屡次停止运行怎么解决_小说APP用户黏性不强怎么解决?
  19. 工作失职的处理决定_工作失职处理决定
  20. python购物系统

热门文章

  1. contentType 与 dataType
  2. contentType的所有类型
  3. 真实网络数据集(带编号的)真实划分图,karate、Dolphin、football
  4. 鸿星尔克紧锣密鼓布局视频号,零粉开播场观超央视新闻带货直播
  5. c汇编语言实验,C语言与汇编语言编程实验
  6. 过拟合(定义、出现的原因4种、解决方案7种)
  7. HITMAN,Life is Strange和适用于Linux的新游戏
  8. 腾讯云2023年最新云服务器配置价格表汇总(轻量服务器+云服务器CVM+GPU云服务器)!
  9. python如何简便使用cumsum函数完成绘制累计概率分布图(CDF)
  10. java常量池与地址_Java常量池