首页 > 数据库 >redis的key命名规范

redis的key命名规范

时间:2023-04-21 15:58:30浏览次数:32  
标签:过期 redis Redis field 内存 key 使用 命名

一、键值设计
1. key名设计
【建议】: 可读性和可管理性
以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:id
redis使用的时候注意命名空间,一个项目一个命名空间,项目内业务不同命名空间也不同。
一般情况下:
1) 第一段放置项目名或缩写 如 project
2) 第二段把表名转换为key前缀 如, user:
3) 第三段放置用于区分区key的字段,对应mysql中的主键的列名,如userid
4) 第四段放置主键值,如18,16

PRO:USER:UID:18

key不能太长也不能太短,键名越长越占资源,太短可读性太差
【强制】不要包含特殊字符,如下划线、空格、换行、单双引号以及其他转义字符;
2. value设计
(1)【强制】:拒绝bigkey(防止网卡流量、慢查询)
string类型控制在10KB以内,hash、list、set、zset元素个数不要超过5000。如果是hash ,set,zset ,list 等元素固定一个桶的数量,比如5000,每次存取的时候,先在本地计算field的hash值,模除5000,确定该field落在哪个key上。

newHashKey  =  hashKey + (*hash*(field) % 5000);   
hset (newHashKey, field, value) ;  
hget(newHashKey, field)

大key数据存⼊Redis,除了带来极大的内存占用外,在并发高时,很容易就会将网卡流量占满,进而造成整个服务器上的所有服务不可用。虽然Redis支持512MB大小的string,但是假设1mb的string大key,每秒重复写入10次,就会导致写入网络IO达10MB;
(1)读写大key会导致超时严重,网卡流量占满,甚至阻塞服务,更甚者导致宕机风险。
(2)如果删除大key,DEL命令可能阻塞Redis进程数十秒,使得其他请求阻塞,对应用程序和Redis集群可用性造成严重的影响。
非字符串的bigkey,不要使用del删除,使用hscan、sscan、zscan方式渐进式删除,同时要注意防止bigkey过期时间自动删除问题(例如一个200万的zset设置1小时过期,会触发del操作,造成阻塞,而且该操作不会不出现在慢查询中
(2)【推荐】:选择适合的数据类型。
例如:实体类型(要合理控制和使用数据结构内存编码优化配置,例如ziplist,但也要注意节省内存和性能之间的平衡)
3.【推荐】:控制key的生命周期,redis不是垃圾桶。
Redis key一定要设置过期时间。要跟自己的业务场景,需要对key设置合理的过期时间。可以在写入key时,就要追加过期时间;也可以在需要写入另一个key时,删除上一个key。说明:
(1)若不设置的话,这些key会一直占用内存不释放,随着时间的推移会越来越大,直到达到服务器的内存上限,导致服务器宕机等重大事故;
(2)对于key的超时时长设置,可根据业务场景进行评估,设置合理有效期;
(3)某些业务的确需要长期有效,可以判断即将到期时,重新设置有效期,避免引起热点key问题。
二、命令使用
1.【推荐】 O(N)命令关注N的数量
例如hgetall、lrange、smembers、zrange、sinter等并非不能使用,但是需要明确N的值。有遍历的需求可以使用hscan、sscan、zscan代替。
2.【推荐】:禁用命令
禁止线上使用keys、flushall、flushdb等,通过redis的rename机制禁掉命令,或者使用scan的方式渐进式处理。
3.【推荐】合理使用select
redis的多数据库较弱,使用数字进行区分,很多客户端支持较差,同时多业务用多数据库实际还是单线程处理,会有干扰。
4.【推荐】使用批量操作提高效率

参考博客:https://blog.csdn.net/hudeyong926/article/details/120343766

标签:过期,redis,Redis,field,内存,key,使用,命名
From: https://www.cnblogs.com/jelly12345/p/17340677.html

相关文章

  • ssh-keygen 生成.ssh文件
    ssh-keygen-trsa-C"[email protected]":生成最新OPENSSH格式的密钥对。openssh格式 ssh-keygen-mPEM-trsa-b4096-C"[email protected]"生成老版本的rsa格式的密钥对。rsa格式 参数说明-m:参数指定密钥的格式,PEM(也就是RSA格式)是之前使用的旧格式-b:指定密钥长度;-e:......
  • 【汇智学堂】单机部署使用Redis
    First:https://github.com/microsoftarchive/redis/releasesDownload,unzip,asthis:Second,runcmd,startredisserviceredis-server.exeredis.windows.confAsabove,serviceissuccess。Thisisserver,ifclosethiswindow,servicewillbeclosed.ThirdAnotherc......
  • GPT-NER:通过大型语言模型的命名实体识别
    讲在前面,chatgpt出来的时候就想过将其利用在信息抽取方面,后续也发现了不少基于这种大语言模型的信息抽取的论文,比如之前收集过的:https://github.com/cocacola-lab/GPT4IEhttps://github.com/RidongHan/Evaluation-of-ChatGPT-on-Information-Extractionhttps://github.com/cocac......
  • [oeasy]python0135_命名惯用法_name_convention
    命名惯用法回忆上次内容上次了解了isidentifier的细节关于关键字关于下划线如何查询变量所指向的地址?id如何查询已有的各种变量?locals如果用一个变量a的值给另一个变量b赋值是什么样的过程呢??......
  • Redis 热 Key 发现以及解决办法
    内容转自:https://joyspace.jd.com/sheets/YZxilLHtAc98E1k5kHDK一、背景介绍  最近在技术交流微信群里看大家讨论技术,其中有谈到 Redis 热 Key 的一些问题解决方案,我也仔细思考了一下我们目前系统中 Redis 的使用场景,我们是不是也存在热 Key 问题,或者说如果我们也出......
  • [oeasy]python0135_命名惯用法_name_convention
    命名惯用法回忆上次内容上次了解了isidentifier的细节关于关键字关于下划线 如何查询变量所指向的地址?id 如何查询已有的各种变量?locals 如果用一个变量a的值给另一个变量b赋值是什么样的过程呢??......
  • 非关系型数据库安装-redis安装
    linux安装redis最新稳定版本原创 PHP星 编程经验共享 2023-03-1608:00 发表于广东收录于合集#linux18个#redis5个在安装redis之前我们需要提前安装编译安装需要的扩展库,例如:gcc,make等。但是最新版本要求需要python3的支持,所以我们还需要安装python3.1.安装......
  • Redis - 数据类型映射底层结构
    简介从数据类型上体现就是,同一个数据类型,在不同的情况下会使用不同的编码类型,底层所使用的的数据结构也不相同。字符串对象字符串对象的编码可以是int、raw和embstr三者之一。embstr编码是专门用于保存简短字符串的一种优化编码方式,与raw编码会调用两次内存分配函数分......
  • Spring中Redis存取数据示例
    1.导入StringRedisTemplate类importorg.springframework.data.redis.core.StringRedisTemplate;2.自动装配@AutowiredprivateStringRedisTemplatestringRedisTemplate;3.存数据(设置5分钟过期)Stringtoken=UUID.randomUUID().toString();Stringkey=RedisPrefix......
  • C#基础 namespace 命名空间嵌套,各空间内成员相互独立
     .NETFramework:4.7.2       IDE:VisualStudioCommunity2019        OS:Windows10x64    typesetting:Markdown codeusingSystem;namespaceSpaceOuter{classStudent{publicintnum=0;}namespaceSpaceI......