Redis 运维规范_key 设计规范

梦莱4个月前技术文章76

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


相关文章

企业级大数据安全架构(五)

企业级大数据安全架构(五)

本章节介绍安全架构里面一个重要组件Knox安装,我们是通过ambari安装,如果安装开源Knox可参考官网文档1 ambari页面add service2勾选Knox安装点击NEXT3选择安装knox...

CDP实操--动态启停服务

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

sqlserver收缩事务日志失败

sqlserver收缩事务日志失败

一、背景2022.01.12 日晚上,sqlserver实例空间使用率达到85%开始告警。查看发现目前日志空间有较大增长,如下图所示:与客户方进行反馈,在1月13日中午进行事务日志的收缩操作,发现日志...

CDP实操--配置Ranger Kafka Policy(六)

CDP实操--配置Ranger Kafka Policy(六)

1.在 Cloudera Manager 中,导航到Kafka > Configuration。2.将SSL 客户端身份验证设置为none.3.将代理间协议设置为 SASL_PLAINTEXT。...

 MySQL运维实战(1.2)安装部署:使用二进制安装部署

MySQL运维实战(1.2)安装部署:使用二进制安装部署

一般在生产环境,我们会使用二进制安装的方式安装MySQL。使用二进制安装,在处理单机多实例、升级MySQL等场景下更加方便。如果有特殊的需求(比如要打一些patch),我们还可以自己编译二进制。1、下...

MySQL运维实战(6)用户认证插件caching_sha2_password

MySQL用户认证可以使用几种不同的方式,创建用户时可以制定认证方式:create user 'username'@'%' identif...

发表评论    

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