一、实现目标

简洁,高效,可维护

二、键值设计规约

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命名规范的设计相关推荐

  1. redis key命名规范_公司内部 Redis 使用规范

    前言 在业务中,会经常使用 Redis 作为后端缓存.存储.如果结构规划不合理.命令使用不规范,会造成系统性能达到瓶颈.活动高峰系统可用性下降,也会增大运维难度.为了避免出现因 Redis 使用不当, ...

  2. redis key命名规范_redis简介

    key里面存储filed-value的map类型 redis数据结构 字符串类型 散列类型(Hash) 列表类型 集合类型 有序集合类型 key不要太长,最好不要超过1024个字节,但也别太短,要有一 ...

  3. redis key命名规范_Redis几个实战经验积累

    redis是一种nosql数据库,他的数据是保存在内存中,同时redis可以定时把内存数据同步到磁盘,即可以将数据持久化,并且他比memcached支持更多的数据结构(string,list列表[队列 ...

  4. Redis的key命名规范

    一.键值设计 1. key名设计 [建议]: 可读性和可管理性         1) 建议全部⼤写         2) key不能太长也不能太短,键名越长越占资源,太短可读性太差         3 ...

  5. json key 命名规范_jsonapi

    JSON API 规范 本文定义了一个标准的 JSON API规范,即一个应用于 Web 前后端 Ajax 数据交互规范,用以定义客户端如何获取与修改资源,以及服务器如何响应对应请求. JSON AP ...

  6. Redis常用命令及命名规范

    redis命令用于在redis服务上执行操作,要在redis服务上执行命令,需要一个redis客户端 del key,该命令用于在key存在时删除key,可以删除多个key dump key,查看某个 ...

  7. 阿里mysql命名规范_MySQL命名、设计及使用规范《MySQL命名、设计及使用规范》

    数据库环境 dev:开发环境,开发可读写,可修改表结构.开发人员可以修改表结构,可以随意修改其中的数据但是需要保证不影响其他开发同事. qa:测试环境,开发可读写,开发人员可以通过工具修改表结构. s ...

  8. 17 redis -key设计原则

    书签系统 create table book ( bookid int, title char(20) )engine myisam charset utf8;insert into book val ...

  9. Redis入门——3.Redis key的设计技巧

    Redis key的设计技巧 一,key设计原则 把表名转换为key前缀, 比如: tag: 第二段放置用于区分key的字段–对应mysql中的主键的列名 第三段放置主键值 第三段写列名 二,案例 用 ...

  10. Redis key前缀的设计与使用

    阅读目录 采用模板方法模式进行设计前缀空间 RedisPrefixKey 接口 RedisBasePrefixKey 抽象类 UserKey 实现类(自定义) 改造RedisUtil工具类的方法 具体 ...

最新文章

  1. css绝对定位如何在不同分辨率下的电脑正常显示定位位置?
  2. 用户输入与while循环
  3. labview 串口通信开发基础详解
  4. Android Canvas绘制带箭头的直线
  5. android的cantext对象,安卓Android Context类实例详解
  6. dotnetbar 5.8.0.3
  7. 迈向 HTTPS,HTTPS 到底解决了什么问题
  8. Docker教程小白实操入门(15)--如何使用WORKDIR、ENV、ARG和EXPOSE设置镜像
  9. 中小型软件产品解决方案模板
  10. B站黑马Java基础+就业班+各种项目idea版本(正在更新)4测试 反射 注解
  11. Multisim里导入没有的元器件(以NPN型三极管2N9013为例)
  12. html照片苹果手机,iPhone如何拍出漂亮唯美的照片
  13. 微信小程序自定义yPicker组件分析及省市区三级联动实现
  14. IP地址中的网络地址和主机地址分别是什么意思
  15. 如何跳过计算机配置直接开机,怎么跳过Windows update配置直接开机?
  16. 学计算机要不要懂绘画,学绘画 学修图 你需要一台怎样的电脑
  17. IP地址库介绍 (转)
  18. slides.jquery.js快速实现轮播图效果
  19. Spring5春天还是配置地狱
  20. 【SAP】ABAP——Web Service简介与配置方法

热门文章

  1. 在Python中使用XGBoost和scikit-learn进行随机梯度增强
  2. 优质书籍资源仓库推荐【欢迎推送书籍】
  3. 20170908在线编程之圆周上问两点间的距离问题
  4. opencv 图像卷积运算函数filter2D()
  5. 操作BOM对象的方法
  6. 操作系统导论 书中代码下载_经典教材统计学习导论终于有Python版了(附下载)...
  7. 有向无环图 前一个任务 后一个任务称为什么 英文
  8. C++ 原子操作 std::atomic<int>
  9. Ubuntu IPFS小白安装入门教程
  10. 初始jquery事件-动态添加的新元素没有绑定上旧元素的事件