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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Redis Scan 命令使用教程(高效遍历海量数据的方法)

    Redis Scan 命令使用教程(高效遍历海量数据的方法)

    Scan 是 Redis 2.8 版本引入的迭代式遍历命令,主要用于遍历 Redis 中的键集合或集合类型(如 Hash、Set、Sorted Set)的元素,本文将从基础介绍、实现原理、实操方式到实践总结,全面讲解 Scan 命令的使用,感兴趣的朋友跟随小编一起看看吧
    2025-09-09
  • Redis如何解决BigKey

    Redis如何解决BigKey

    在Redis的使用过程中,我们经常会遇到BigKey, BigKey的大值会导致Redis内存中产生大量不连续的碎片,降低内存利用效率,本文主要介绍了Redis如何解决BigKey,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Redis中切片集群详解

    Redis中切片集群详解

    切片集群Redis中,数据增多了,是该加内存还是加实例?采用云主机来运行Redis实例,那么,该如何选择云主机的内存容量呢?用Redis保存5000万个键值对,每个键值对大约是512B方案一:大内存云主机:选择一台32GB内存的云主机来部署Redis
    2025-01-01
  • Redis实现每日签到功能(大数据量)

    Redis实现每日签到功能(大数据量)

    在面对百万级用户签到情况下,传统数据库存储和判断会遇到瓶颈,使用Redis的二进制数据类型可实现高效的签到功能,示例代码展示了如何调用这些功能,包括当天签到、补签以及查询签到记录,PHP结合Redis二进制数据类型可有效处理大数据量下的签到问题
    2024-10-10
  • 64位Windows下安装Redis教程

    64位Windows下安装Redis教程

    这篇文章主要介绍了64位Windows下安装Redis教程,本文使用Microsoft Open Tech group 在 GitHub上开发的一个Win64版本的Redis,需要的朋友可以参考下
    2014-09-09
  • 一文搞懂阿里云服务器部署Redis并整合Spring Boot

    一文搞懂阿里云服务器部署Redis并整合Spring Boot

    这篇文章主要介绍了一文搞懂阿里云服务器部署Redis并整合Spring Boot,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • redis 实现登陆次数限制的思路详解

    redis 实现登陆次数限制的思路详解

    这篇文章主要介绍了redis 实现登陆次数限制的思路详解,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Redis操作命令总结

    Redis操作命令总结

    这篇文章主要介绍了Redis操作命令总结,本文讲解了key pattern 查询相应的key、字符串类型的操作、链表操作、hashes类型及操作、集合结构操作、有序集合、服务器相关命令等内容,需要的朋友可以参考下
    2015-03-03
  • Redis集群的搭建图文教程

    Redis集群的搭建图文教程

    下面小编就为大家分享一篇Redis集群的搭建图文教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • redis中zSet实现排行榜的使用示例

    redis中zSet实现排行榜的使用示例

    在工作中,有时候需要实现排行榜功能,本文主要介绍了redis中zSet实现排行榜的使用示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10

最新评论