redis key命名规范的设计

 更新时间:2024年03月15日 11:31:41   作者:liuyunshengsir  
如果结构规划不合理、命令使用不规范,会造成系统性能达到瓶颈、活动高峰系统可用性下降,也会增大运维难度,本文主要介绍了redis key命名规范的设计,感兴趣的可以了解一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

一、实现目标

简洁,高效,可维护

二、键值设计规约

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命名规范内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 将MongoDB作为Redis式的内存数据库的使用方法

    将MongoDB作为Redis式的内存数据库的使用方法

    这篇文章主要介绍了将MongoDB作为Redis式的内存数据库的使用方法,原理其实只是将内存虚拟作为磁盘,需要的朋友可以参考下
    2015-06-06
  • Redis解决Session共享问题的方法详解

    Redis解决Session共享问题的方法详解

    这篇文章主要为大家详细介绍了分布式系统Redis解决Session共享问题的方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2022-07-07
  • redis主从切换导致的数据丢失与陷入只读状态故障解决方案

    redis主从切换导致的数据丢失与陷入只读状态故障解决方案

    这篇文章主要介绍了redis主从切换导致的数据丢失与陷入只读状态故障解决方案的相关资料,需要的朋友可以参考下
    2023-05-05
  • Redis简单动态字符串SDS的实现示例

    Redis简单动态字符串SDS的实现示例

    Redis没有直接复用C语言的字符串,而是新建了SDS,本文主要介绍了Redis简单动态字符串SDS的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • Redis实现高并发计数器

    Redis实现高并发计数器

    这篇文章主要为大家详细介绍了Redis实现高并发计数器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • 实现在线?+?离线模式进行迁移?Redis?数据实战指南

    实现在线?+?离线模式进行迁移?Redis?数据实战指南

    这篇文章主要介绍了实现在线?+?离线模式进行迁移?Redis?数据实战指南的相关资料,需要的朋友可以参考下
    2023-01-01
  • Redis增减库存避坑的实现

    Redis增减库存避坑的实现

    在电商平台或者仓库管理系统中,库存的管理是非常重要的一项任务,本文主要介绍了Redis增减库存避坑的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Redis报错:Could not create server TCP listening socket 127.0.0.1:6379: bind:解决方法

    Redis报错:Could not create server TCP 

    这篇文章主要介绍了Redis报错:Could not create server TCP listening socket 127.0.0.1:6379: bind:解决方法,是安装与启动Redis过程中比较常见的问题,需要的朋友可以参考下
    2023-06-06
  • 浅析Redis Sentinel 与 Redis Cluster

    浅析Redis Sentinel 与 Redis Cluster

    本文主要介绍Redis Sentinel 及 Redis Cluster的区别及用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Redis实现优惠券限一单限制详解

    Redis实现优惠券限一单限制详解

    这篇文章主要介绍了Redis解决优惠券秒杀应用案例,本文先讲了抢购问题,指出其中会出现的多线程问题,提出解决方案采用悲观锁和乐观锁两种方式进行实现,然后发现在抢购过程中容易出现一人多单现象,需要的朋友可以参考下
    2022-12-12

最新评论

?


http://www.vxiaotou.com