请选择 进入手机版 | 继续访问电脑版

爱分享吧

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1360|回复: 0

Redis中如何发现并优化生产环境的big key?

[复制链接]

75

主题

75

帖子

1058

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1058
发表于 2019-9-2 16:15:40 | 显示全部楼层 |阅读模式
Redis中的大key一直是重点需要优化的对象,big key既占用比较多的内存,也可能占用比较多的网卡资源,造成redis阻塞,因此我们需要找到这些big key进行优化

一、寻找big key
通常来说找到redis中的big key有如下几种方法
1、redis-cli自带--bigkeys,例如:redis-cli -h <hostip> -a <password> --bigkeys
2、获取生产Redis的rdb文件,通过rdbtools分析rdb生成csv文件,再导入MySQL或其他数据库中进行分析统计,根据size_in_bytes统计bigkey
3、通过python脚本,迭代scan key,每次scan 1000,对扫描出来的key进行类型判断,例如:string长度大于10K,list长度大于10240认为是big bigkeys
4、其他第三方工具,例如:redis-rdb-cli
地址:https://github.com/leonchen83/redis-rdb-cli

二、优化big key
1、优化big key的原则就是string减少字符串长度,list、hash、set、zset等减少成员数
2、以hash类型举例来说,对于field过多的场景,可以根据field进行hash取模,生成一个新的key,例如原来的
hash_key:{filed1:value, filed2:value, filed3:value ...},可以hash取模后形成如下key:value形式
hash_key:mod1:{filed1:value}
hash_key:mod2:{filed2:value}
hash_key:mod3:{filed3:value}
...
取模后,将原先单个key分成多个key,每个key filed个数为原先的1/N
3、string类型的big key,如文章正文,建议不要存入redis,用文档型数据库MongoDB代替或者直接缓存到CDN上等方式优化


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|爱分享吧

GMT+8, 2021-4-14 12:20 , Processed in 0.074830 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表