Redis排查大key的3种方法小结

 更新时间:2023年08月04日 15:18:34   作者:Young丶  
本文主要介绍了Redis排查大key的3种方法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在日常Redis的使用中,难免遇到因为 key 存储了过大的数据而造成请求缓慢甚至阻塞的情况,这个时候就需要排查 Redis 的大key去优化业务了,下面提供一些排查方案总结,仅供参考。

一、多大的 key 算大呢?

Redis 实践总结(仅供参考):

合理的 Key 中 Value 的字节大小,推荐小于 10 KB。

过大的 Value 会引发数据倾斜、热点Key、实例流量或 CPU 性能被占满等问题,应从设计源头上避免此类问题带来的性能影响。

那么 value Bytes > 10 kb 可以作为判断 大 key 的一个参考值。

二、排查大 key 的方法

1、使用命令 --bigkeys

--bigkeys 是 redis 自带的命令,对整个 Key 进行扫描,统计 string,list,set,zset,hash 这几个常见数据类型中每种类型里的最大的 key。

string 类型统计的是 value 的字节数;另外 4 种复杂结构的类型统计的是元素个数,不能直观的看出 value 占用字节数,所以 --bigkeys 对分析 string 类型的大 key 是有用的,而复杂结构的类型还需要一些第三方工具。

注:元素个数少,不一定 value 不大;元素个数多,也不一定 value 就大

redis-cli -h 127.0.0.1 -p 6379 -a "password" --bigkeys

--bigkeys 是以 scan 延迟计算的方式扫描所有 key,因此执行过程中不会阻塞 redis,但实例存在大量的 keys 时,命令执行的时间会很长,这种情况建议在 slave 上扫描。

–-bigkeys 其实就是找出类型中最大的 key,最大的 key 不一定是大 key,最大的 key 都不超过 10kb 的话,说明不存在大 key。

但某种类型如果存在较多的大key (>10kb),只会统计 top1 的那个 key,如果要统计所有大于 10kb 的 key,需要用第三方工具扫描 rdb 持久化文件。

2、使用 memory 命令查看 key 的大小(仅支持 Redis 4.0 以后的版本)

redis-cli -h 127.0.0.1 -p 6379 -a password
MEMORY USAGE keyname1
(integer) 157481
MEMORY USAGE keyname2
(integer) 312583

3、使用 Rdbtools 工具包

Rdbtools 是 python写的 一个第三方开源工具,用来解析 Redis 快照文件。除了解析 rdb 文件,还提供了统计单个 key 大小的工具。

1、安装

git clone https://github.com/sripathikrishnan/redis-rdb-tools
cd redis-rdb-tools sudo && python setup.py install

2、使用

从 dump.rdb 快照文件统计, 将所有 > 10kb 的 key 输出到一个 csv 文件

rdb dump.rdb -c memory --bytes 10240 -f live_redis.csv

到此这篇关于Redis排查大key的3种方法小结的文章就介绍到这了,更多相关Redis排查大key内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis实现好友关注的示例代码

    Redis实现好友关注的示例代码

    本文主要介绍了Redis实现好友关注的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 基于Redis实现API接口访问次数限制

    基于Redis实现API接口访问次数限制

    日常开发中会有一个常见的需求,需要限制接口在单位时间内的访问次数,比如说某个免费的接口限制单个IP一分钟内只能访问5次,该怎么实现呢,本文小编给大家介绍了如何基于Redis实现API接口访问次数限制,需要的朋友可以参考下
    2024-11-11
  • 详解redis数据结构之压缩列表

    详解redis数据结构之压缩列表

    这篇文章主要介绍了详解redis数据结构之压缩列表的相关资料,压缩列表在redis中的结构体名称为ziplist,其是redis为了节约内存而声明的一种数据结构,需要的朋友可以参考下
    2017-05-05
  • Redis中Zset类型常用命令的实现

    Redis中Zset类型常用命令的实现

    Zset是Redis的一种有序集合数据类型,Zset通过压缩列表和跳跃表两种底层编码方式支持小数据集和大数据集,支持多种操作,包括添加、查询、删除元素以及集合运算等,具有不同的时间复杂度,感兴趣的可以了解一下
    2024-10-10
  • redission分布式锁防止重复初始化问题

    redission分布式锁防止重复初始化问题

    这篇文章主要介绍了redission分布式锁防止重复初始化问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Jedis操作Redis实现模拟验证码发送功能

    Jedis操作Redis实现模拟验证码发送功能

    Redis是一个著名的key-value存储系统,也是nosql中的最常见的一种,这篇文章主要给大家介绍Jedis操作Redis实现模拟验证码发送功能,感兴趣的朋友一起看看吧
    2021-09-09
  • Redis KEYS查询大批量数据替代方案

    Redis KEYS查询大批量数据替代方案

    在使用 Redis 时,KEYS 命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞 Redis 服务,本文将介绍SCAN命令、有序集合、哈希表和RediSearch模块四种替代 KEYS 的高效方案,需要的朋友可以参考下
    2024-12-12
  • Redis实现排行榜及相同积分按时间排序功能的实现

    Redis实现排行榜及相同积分按时间排序功能的实现

    这篇文章主要介绍了Redis实现排行榜及相同积分按时间排序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Redis的持久化方式

    Redis的持久化方式

    Redis提供了两种主要的持久化方式:RDB和AOF,RDB通过定时快照的方式保存数据状态,而AOF记录每个写操作以便于重启时重放,两者可以结合使用,且在重启时AOF文件会被优先用于数据恢复,RDB快照具有速度快、节省磁盘空间的优点,但可能会丢失最近的数据
    2024-10-10
  • Redis使用ZSET实现消息队列的项目实践

    Redis使用ZSET实现消息队列的项目实践

    本文主要介绍了Redis使用ZSET实现消息队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07

最新评论