Redis 运维规范_key 设计规范

梦莱11个月前技术文章225

一、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 同时过期。缓存中有大量数据同时过期,导致大量请求无法得到处理,容易出现缓存雪崩。建议缓存的过期时间加上一个随机值时间,将过期时间打散。


相关文章

helm chart包编写

helm chart包编写

相关文档https://helm.sh/zh/docs/charttemplateguide/getting_started/编写helm chart包创建chart包```Plain Text h...

at和corntab 计划任务

一、什么是计划任务每个人在生活当中或多或少都有一些工作,有的工作是按照一定周期循环的, 例如每天固定时间的闹铃、工作打卡等等; 有的工作则是临时发生的,例如刚好有亲友到访,需要你在一个特定的时间去车站...

chengying-6.0登入接口逆向

chengying-6.0登入接口逆向

版本更新首先是登入的加密url:http://172.16.121.70/login参数1. username:admin@dtstack.com2. password:614bb9438210c69...

mysql高可用部署(主主模式)

添加主从同步用户1. 登陆mysqlmysql -uroot -p 2. 创建同步用户CREATE USER 'sync_user'@'%' IDENTIFIED BY '1qaz!QAZ'; 3. ...

apiserver指标分析

apiserver指标分析

概述kube-apiserver 是集群所有请求的入口,指标的分析可以反应集群的健康状态。Apiserver 的指标可以分为以下几大类:请求速率和延迟控制器队列的性能etcd 的性能进程状态:文件系统...

云原生之网络篇

云原生之网络篇

前言:在云原生如火如荼的今天,作为云原生的基石:kubernetes(简称k8s)是不得不掌握的技术。而k8s的网络插件是大家绕不开的技术,但是由于k8s的开源包容性,以及网络的复杂性,导致网络插件出...

发表评论    

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