关于redis 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进行处理。
写到最后:
如果您有好的建议和想法,欢迎留言,我会继续完善文档,提高文档输出质量。
关于redis key命名规范的设计相关推荐
- redis key命名规范_公司内部 Redis 使用规范
前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...
- redis key命名规范_redis简介
key里面存储filed-value的map类型 redis数据结构 字符串类型 散列类型(Hash) 列表类型 集合类型 有序集合类型 key不要太长,最好不要超过1024个字节,但也别太短,要有一 ...
- redis key命名规范_Redis几个实战经验积累
redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列 ...
- Redis的key命名规范
一.键值设计 1. key名设计 [建议]: 可读性和可管理性 1) 建议全部⼤写 2) key不能太长也不能太短,键名越长越占资源,太短可读性太差 3 ...
- json key 命名规范_jsonapi
JSON API 规范 本文定义了一个标准的 JSON API规范,即一个应用于 Web 前后端 Ajax 数据交互规范,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求. JSON AP ...
- Redis常用命令及命名规范
redis命令用于在redis服务上执行操作,要在redis服务上执行命令,需要一个redis客户端 del key,该命令用于在key存在时删除key,可以删除多个key dump key,查看某个 ...
- 阿里mysql命名规范_MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》
数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...
- 17 redis -key设计原则
书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8;insert into book val ...
- Redis入门——3.Redis key的设计技巧
Redis key的设计技巧 一,key设计原则 把表名转换为key前缀, 比如: tag: 第二段放置用于区分key的字段–对应mysql中的主键的列名 第三段放置主键值 第三段写列名 二,案例 用 ...
- Redis key前缀的设计与使用
阅读目录 采用模板方法模式进行设计前缀空间 RedisPrefixKey 接口 RedisBasePrefixKey 抽象类 UserKey 实现类(自定义) 改造RedisUtil工具类的方法 具体 ...
最新文章
- css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
- 用户输入与while循环
- labview 串口通信开发基础详解
- Android Canvas绘制带箭头的直线
- android的cantext对象,安卓Android Context类实例详解
- dotnetbar 5.8.0.3
- 迈向 HTTPS,HTTPS 到底解决了什么问题
- Docker教程小白实操入门(15)--如何使用WORKDIR、ENV、ARG和EXPOSE设置镜像
- 中小型软件产品解决方案模板
- B站黑马Java基础+就业班+各种项目idea版本(正在更新)4测试 反射 注解
- Multisim里导入没有的元器件(以NPN型三极管2N9013为例)
- html照片苹果手机,iPhone如何拍出漂亮唯美的照片
- 微信小程序自定义yPicker组件分析及省市区三级联动实现
- IP地址中的网络地址和主机地址分别是什么意思
- 如何跳过计算机配置直接开机,怎么跳过Windows update配置直接开机?
- 学计算机要不要懂绘画,学绘画 学修图 你需要一台怎样的电脑
- IP地址库介绍 (转)
- slides.jquery.js快速实现轮播图效果
- Spring5春天还是配置地狱
- 【SAP】ABAP——Web Service简介与配置方法
热门文章
- 在Python中使用XGBoost和scikit-learn进行随机梯度增强
- 优质书籍资源仓库推荐【欢迎推送书籍】
- 20170908在线编程之圆周上问两点间的距离问题
- opencv 图像卷积运算函数filter2D()
- 操作BOM对象的方法
- 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
- 有向无环图 前一个任务 后一个任务称为什么 英文
- C++ 原子操作 std::atomic<int>
- Ubuntu IPFS小白安装入门教程
- 初始jquery事件-动态添加的新元素没有绑定上旧元素的事件