Redis 数据库铁律
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 数据库铁律相关推荐
- mysql复数记录,MySQL 数据库铁律(小结)
好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 - 铁律 Level 备注 字符集 使用 utf-8 ...
- MySQL 数据库铁律
好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 - 铁律 Level 备注 字符集 使用 utf-8 ...
- 【MySQL】MySQL 数据库设计铁律
好的数据库规范有助于减少软件实现的复杂度,降低沟通成本,本铁律主要涵盖了建库建表.建索引.写 SQL.ORM 映射等方面的处理约定. 1.建库铁律 2.建表铁律 设置合适的字符存储长度,不但可以节约数 ...
- MySQL 数据库运用铁律
规矩成方圆,造化钟神秀.在MySQL数据库的运用中也一定要遵守一定的铁律,才能减少开发过程中产生的一些不必要的问题,本文主要讲述在建库建表.建索引.SQL.ORM 映射等方面的处理约定. 1. 建库铁 ...
- MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...
- SQL Server索引管理之六大铁律
GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...
- redis mysql查询数据类型_linux 常见的标识与Redis数据库详解
xxx@xxx:~$ : 第一个 xxx 只的是 用户名 第二个 xxx 代表的是 HOST主机 ~ : 当前用户的根, 根的位置在 /home/用户名 $ : 代表当前用户是一个普通用户 # : 代 ...
- Redis数据库设置密码
Redis数据库的默认打开方式为无密码打开,现在要将其设置为以密码形式打开. Redis文件夹内容 1.修改配置文件 在redis.windows.conf文件中设置密码的命令中添加requirepa ...
- 彻底取代Redis+数据库架构,京东618稳了!
作者介绍 京东零售在线存储部,致力于分布式系统.开源数据库技术的研究,主要负责数据库性能调优.监控和架构设计. 过去十年,随着移动互联网指数级的增长,企业和用户对应用程序的响应性能要求越来越高, 如何 ...
最新文章
- Android 动画(二)
- [计数排序]统计三个数和的[最大概率](洛谷P2911题题解,Java语言描述)
- 【P20】PCM1794全平衡解码模块电路
- Android开发中验证码的生成
- Trustzone OP-TEE 在QEMU平台上的编译、运行与测试
- 在线旅游网站技术讲解
- 直线分割平面的公式_几种分割平面问题 | 学步园
- 时光不负,对我来说不寻常的一年 | 2021 年终总结
- amr文件怎么转换成mp3
- 计算机课堂小游戏活跃气氛,活跃气氛的70个小游戏 比较嗨的暖场游戏
- 二舅治好我的精神内耗,也让我火出了B站
- uniapp小程序唤醒微信支付
- php将文本文件中的内容呈现到一个表格中
- Python之pandas库--基础
- java操作MangoDB的聚合Aggregation用法-分页查询
- jquery.photoClip.js图片上传插件带拖动裁剪
- 2006中国商业网站100强 《互联网周刊》
- app屡次停止运行怎么解决_小说APP用户黏性不强怎么解决?
- 工作失职的处理决定_工作失职处理决定
- python购物系统
热门文章
- contentType 与 dataType
- contentType的所有类型
- 真实网络数据集(带编号的)真实划分图,karate、Dolphin、football
- 鸿星尔克紧锣密鼓布局视频号,零粉开播场观超央视新闻带货直播
- c汇编语言实验,C语言与汇编语言编程实验
- 过拟合(定义、出现的原因4种、解决方案7种)
- HITMAN,Life is Strange和适用于Linux的新游戏
- 腾讯云2023年最新云服务器配置价格表汇总(轻量服务器+云服务器CVM+GPU云服务器)!
- python如何简便使用cumsum函数完成绘制累计概率分布图(CDF)
- java常量池与地址_Java常量池