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命名规范的更多相关文章

  1. 关于redis key命名规范的设计

    一.实现目标 简洁,高效,可维护 二.键值设计规约 1 . Redis key命名风格 [推荐]Redis key命名需具有可读性以及可管理性,不该使用含义不清的key以及特别长的key名: [强制] ...

  2. Redis 的基本操作、Key的操作及命名规范

    Redis基本操作 查看数据的状态 pong redis 给我们返回 PONG,表示 redis 服务 运行正常 redis 默认用 使用 16 个 库 • Redis 默认使用 16 个库,从 0 ...

  3. redis开发使用规范

    redis开发使用规范 1.冷热数据分离,不要将所有数据全部都放在Redis中 根据业务只将高频热数据存储到Redis中[QPS大于5000],对于低频冷数据可以使用mysql等基于磁盘的存储方式. ...

  4. Oracle命名规范

    1.编写目的 使用统一的命名和编码规范,使数据库命名及编码风格标准化,以便于阅读.理解和继承. 2.适用范围 本规范适用于公司范围内所有以ORACLE作为后台数据库的应用系统和项目开发工作. 3.对象 ...

  5. Redis Key 命令

      Redis Key 命令     del key1 key2 - keyn 删除键为key1,key2-keyn,空格分隔. persist key 移除给定 key 的生存时间,将这个 key ...

  6. Java编程风格与命名规范整理

    基本命名规范 包命名 包名按照域名的范围从大到小逐步列出,恰好和Internet上的域名命名规则相反. 由一组以“.”连接的标识符构成,通常第一个标识符为符合网络域名的两个或者三个英文小写字母. Pe ...

  7. python代码规范和命名规范

    一.简明概述 1.编码 如无特殊情况, 文件一律使用 UTF-8 编码 如无特殊情况, 文件头部必须加入#-*-coding:utf-8-*-标识 2.代码格式 2.1.缩进 统一使用 4 个空格进行 ...

  8. day03变量的命名规范,常量,输出:自带换行,输入,注释,数据类型,运算符,常用字符大小关系

    复习 ''' 1.语言的分类 -- 机器语言:直接编写0,1指令,直接能被硬件执行 -- 汇编语言:编写助记符(与指令的对应关系),找到对应的指令直接交给硬件执行 -- 高级语言:编写人能识别的字符, ...

  9. Redis集群规范

    Redis集群规范 什么是 Redis 集群 分布式(distributed) 容错(fault-tolerant) 是普通单机 Redis 所能使用的功能的一个子集(subset). 集群的容错功能 ...

  10. 3.命名规范《.NET设计规范》

    3.命名规范 3.1 大小写约定 使用合适的大小写增强名字可读性. 3.1.1 标识符的大小写规则 标识符的每个单词首写字幕大写.不要用下划线. PascalCasing camelCasing Pa ...

随机推荐

  1. 从零开始:在树莓派上安装OpenEuler

    树莓派(Raspberry Pi)是一款基于ARM架构的小型电脑,它的便携性和低功耗性能使它成为制作物联网设备或运行嵌入式系统的理想选择.在这篇博客中,我们将介绍如何在树莓派上安装OpenEuler操 ...

  2. swoft-个基于 Swoole 原生协程的PHP 微服务框架

    刚才百度了一下swoft框架,官网打不开了,仓库也暂停了.不由感慨.曾经和同事踩了许多坑使用此极其小众的框架完成微服务项目.使用它的唯一目的就是提高程序性能(底层使用了协程),为此大家都学习了很多新知 ...

  3. Centos8 防火墙

    Centos8 防火墙 一: 防火墙端口相关操作 1:查看防火墙某个端口是否开放 firewall-cmd --query-port=3306/tcp 2:开放防火墙端口 注意:开放端口后要重启防火墙 ...

  4. supervisor 使用中遇到的问题

    supervisor 配置完毕,使用supervisorctl reload 和supervisorctl update 启动时候报错 解决方法使用下面命令启动 /usr/bin/python2 /u ...

  5. lc.59 螺旋矩阵 II

    题目描述 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix . 示例 输入:n = 3 输出:[[1,2,3],[8,9, ...

  6. apt常用命令 - 搬运

    Debian/Ubuntu基础的系统可以使用apt安装.卸载软件包 转自:https://www.jb51.net/os/Ubuntu/56362.html APT 常用命令如下: apt list ...

  7. Maven项目的创建教程

    1.创建Maven项目 首先File->New新建一个Maven项目,选择相应地址保存,点击CREATE完成新建 2.改成Web项目 右键选择Add Framework Support... 再 ...

  8. Bootstarp5笔记

    我这次来更新Bootstarp5的相关知识啦! 一.安装教程 1.在官网下载相应版本 官网地址:getbootstrap.com 我下载的是Bootstarp5版本 2.点击下载之后,会得到一个压缩文 ...

  9. 基于机器学习的语音编解码器声网Agora Silver:支持超低码率下的高音质语音互动

    从 1860 年电话发明,到现如今通过网络进行语音互动,语音始终是最自然.最基础的实时互动方式.过去几年,语音实时互动成为越来越多人日常生活的一部分.但是每个人都会遇到弱网环境,这会直接影响语音通话体 ...

  10. Python——高级数据类型(七)

    1. 列表数据类型的声明与访问 # coding=utf-8 #列表数据类型的声明与访问 my_list =[1,2,3,4,5] # 列表中的元素 print (my_list) # 0 1 2 3 ...