Redis BigKey的问题解决

 更新时间:2023年05月17日 10:35:37   作者:tizzybepeacejoy  
本文主要介绍了Redis BigKey的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

什么是BigKey?

BigKey指的是redis中一些key value值很大,这些key在序列化与反序列化过程中花费的时间很大! 操作bigkey的通常比较耗时,也就意味着阻塞Redis可能性越大!占用的流量同时也会变得很大!

大白话就是bigkey实际指一个key对应的value很大,占用的空间很大!

string长度大于10K,list长度大于10240认为是big bigkeys

如何查看Redis中的bigKey?

我们以String为例:

先存储几个String key进去,然后使用命令!
查看所有BigKey

redis-cli自带的一个命令(不需要连接Redis)。对整个redis进行扫描,寻找较大的key。

redis-cli -h 127.0.0.1 -p 6379 --bigkeys

Redis中有3个String , 可以看到发现一个BigKey key3
获取key3的值 看看

该命令使用scan方式对key进行统计,所以使用时无需担心对redis造成阻塞。
输出大概分为两部分,summary之上的部分,只是显示了扫描的过程。

  • summary部分给出了每种数据结构中最大的Key。
  • 统计出的最大key只有string类型是以字节长度为衡量标准的。
  • list,set,zset等都是以元素个数作为衡量标准,不能说明其占的内存就一定多。所以,如果你的Key主要以string类型存在,这种方法就比较适合。

我的hash中

key3值

这种是查看所有的key 是否是bigKey

查看单个Key

debug object

其中serializedlength表示key对应的value序列化之后的字节数

注意:

debug object bigkey本身可能就会比较慢,它本身就会存在阻塞Redis的可能,可能会比较危险、而且不太准确(序列化后的长度);

memory usage

Redis 4.0开始提供memory usage命令可以计算每个键值的字节数

如何优化

优化big key的原则就是string减少字符串长度,list、hash、set、zset等减少成员数;
string长度大于10K,list长度大于10240认为是big bigkeys

1 拆分

如果对象是整存争取
将对象拆分后才能多个小key-value,get不同的key或者批量获取stringRedisTemplate.opsForValue() .multiGet(keyList)如果对象是部分更新获取数据
可以分拆成几个key-value,也可以存储在hash中,部分更新部分存取!

如果是hash ,set,zset ,list 等元素
固定一个桶的数量,比如1000,每次存取的时候,先在本地计算field的hash值,模除1000,确定该field落在哪个key上。
newHashKey = hashKey + (hash(field) % 1000);
hset(newHashKey, field, value);
hget(newHashKey, field)

set, zset, list 也可以类似上述做法!

2 本地缓存

减少访问redis次数,降低危害减少访问redis次数,降低危害! 当然本地开销也会变大!

到此这篇关于Redis BigKey的问题解决的文章就介绍到这了,更多相关Redis BigKey内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • reids自定义RedisTemplate以及乱码问题解决

    reids自定义RedisTemplate以及乱码问题解决

    本文主要介绍了reids自定义RedisTemplate以及乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 使用Redis实现分布式锁的方法

    使用Redis实现分布式锁的方法

    为了保证我们线上服务的并发性和安全性,目前我们的服务一般抛弃了单体应用,采用的都是扩展性很强的分布式架构,这篇文章主要介绍了使用Redis实现分布式锁的方法,需要的朋友可以参考下
    2022-06-06
  • 详解Redis 数据类型

    详解Redis 数据类型

    这篇文章主要介绍了Redis 数据类型的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • redis由于目标计算机积极拒绝,无法连接的解决

    redis由于目标计算机积极拒绝,无法连接的解决

    这篇文章主要介绍了redis由于目标计算机积极拒绝,无法连接的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • redis配置认证密码的方法

    redis配置认证密码的方法

    这篇文章主要介绍了redis配置认证密码的方法,需要的朋友可以参考下
    2016-08-08
  • Redis主从复制的实现示例

    Redis主从复制的实现示例

    Redis主从复制实现多机备份,本文就来介绍一下Redis主从复制的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Redis BloomFilter实例讲解

    Redis BloomFilter实例讲解

    这篇文章主要介绍了Redis BloomFilter实例。BloomFilter不需要存储key,节省空间,在某些对保密要求非常严格的场合有优势。想要进一步了解BloomFilter运用实例的小伙伴可以了解一下这篇文章
    2021-09-09
  • Redis存储断点续传文件状态的最佳实践

    Redis存储断点续传文件状态的最佳实践

    在断点续传系统中,如何高效地存储和更新文件上传状态是关键,得益于 Redis 高效的内存操作和多种数据结构的支持,它非常适合用于存储上传过程中的临时状态信息,下面,我们将探讨如何利用 Redis 实现文件上传状态的存储,需要的朋友可以参考下
    2024-12-12
  • Redis数据库的安装和配置教程详解

    Redis数据库的安装和配置教程详解

    这篇文章主要介绍了Redis数据库的安装和配置 ,主要包括Linux环境安装Redis和windows环境安装Redis,redis客户端安装方法,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-05-05
  • gem install redis报错的解决方案

    gem install redis报错的解决方案

    今天小编就为大家分享一篇关于gem install redis报错的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01

最新评论