Redis 运维规范_key 设计规范

梦莱2年前技术文章612

一、key 设计规范

1、设计合理的Key名称与长度

Key名称:要见名知其意,方便快速定位问题及相关业务。key 名称要避免使用单双引号、转义字符等特殊符号。

key长度:在能完整描述业务的前提下尽量精简,推荐Key名的长度不超过128字节(越短越好)

2、合理使用类型

Redis提供了丰富的数据类型,可以根据业务场景选择合适的类型。一般情况下可以选择命令复杂度较低的 string 类型,但是对于小数据存储来说元数据内存开销较大,内存利用率会较低。对于使用压缩列表结构的 hash 类型来说,可以很好的提升内存利用率,但命令复杂度会较高。

图片1.png

除 string 外,其余数据类型均含有两种底层数据结构,需合理的设置使用才可以达到想要的效果。

3、大 key

合理设置 key 的 value 大小,避免出现大 key。大 key 容易造成集群数据倾斜;在对大 key 进行遍历操作时,可能会造成流量、CPU 等资源打高,时延变长,影响 Redis 性能。

建议:

(1) 对大 key 进行拆分

(2) 在对大 key 删除时:对于 Redis 4.0及之后版本,建议使用 UNLINK 命令异步删除;对于 Redis 4.0 之前的版本,建议使用 scan 命令分批读取数据,然后再进行删除,避免一次性删除大 key 导致 redis 阻塞。

4、热 key

热 key 会导致集群架构下某个数据分片被大量访问、单个数据分片的压力无法下降,而其他数据分片处于空闲状态的情况。严重的话,热Key的请求压力数量超出Redis的承受能力易造成缓存击穿。

建议:

(1) 热 key 可以考虑读写分离架构分担读压力

(2) 对于热 key 要注意过期时间,避免出现热 key 过期导致大量相关查询直接访问至后段数据库的情况

5、合理使用 hash tag

hash tag 主要作用是将某一固定特征数据存储到一台实例上,合理利用可以避免逐个查询集群中实例。但该操作可能会导致数据集中在一个实例中,造成集群内存倾斜。

6、合理设置 key 过期时间

key 过期时间设置主要需要关注两点:

(1) 避免永久不过期设计:非必要建议使用 expire 给所有 key 设置过期时间,防止 Redis 中残留大量的废弃数据。

(2)避免同一时间大量 key 同时过期。缓存中有大量数据同时过期,导致大量请求无法得到处理,容易出现缓存雪崩。建议缓存的过期时间加上一个随机值时间,将过期时间打散。


相关文章

Flume使用案例之Flume与Flume之间数据传递,多Flume汇总数据到单Flume

目标:flume11监控文件hive.log,flume-22监控某一个端口的数据流,flume11与flume-22将数据发送给flume-33,flume33将最终数据写入到HDFS。分步实现:1...

CDP实操--动态启停服务

以yarn nodemanager 为例获取role yarn nodemanager:curl -u admin:admin 'http://172.16.106.151:7180/api/v1/c...

A集群导入B集群中的高可用版rancher,一直处于pending状态

A集群导入B集群中的高可用版rancher,一直处于pending状态

问题现象:已知在B集群中采用helm方式部署了一个高可用版本的rancher,该rancher中已经配置导入了三套集群,并且三套集群状态在rancher控制台处均显示正常,日常可借助该rancher管...

MySQL运维实战(2.2)忘记密码如何处理

如果忘记了一个普通用户的密码,可以使用管理员账号登录,修改其他用户的密码。但是如果所有管理员账号的密码都忘记了,应该怎么处理呢?如果忘记root密码,可以使用skip-grant-tables参数启动...

将Nexus作为容器镜像仓库的配置过程

将Nexus作为容器镜像仓库的配置过程

Docker,Helm和Kubernetes的简化容器管理Nexus Repository建立在广泛的企业存储功能之上,是适用于所有Docker镜像和Helm Chart存储库的强大的注册表。Nexu...

CDH-Kafka节点迁移

CDH-Kafka节点迁移

1、节点迁移先添加节点,将需要换掉的节点关闭,等待选举leader启动新添加的节点关闭旧的节点等待选举leader出现离线分区。需要将分区分配到新的节点2、重分配分区kafak kerberos环境下...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。