Redis中的BigKey相关问题

本文探讨了bigkey的概念,即大值键,重点关注其在内存空间、性能和Redis中的影响。文章介绍了bigkey的危害,包括内存不均衡、阻塞和CPU负载上升,并提出了优雅的键值设计和数据拆分的解决策略。
摘要由CSDN通过智能技术生成

什么是bigkey

bigkey是指key对应的value所占用的内存空间比较大。例如一个字符串类型的value可以最大存到512MB,一个列表类型的value最多可以存储2^32-1个元素。如果按照数据结构来细分的话,一般分为字符串类型bigkey和非字符串类型bigkey。
字符串类型:体现在单个value值很大,一般认为超过10kb就是bigkey。
非字符串类型:哈希、列表、集合、有序集合体现在元素个数过多。
bigkey无论在空间复杂度还是时间复杂度都不太友好。

bigkey的危害

bigkey的危害主要体现在四个方面:
(1)内存空间不均匀
例如在Redis Cluster中,bigkey会造成节点的内存空间使用不均匀。
(2)超时阻塞:由于Redis单线程的特性,对元素较多的hash,list,zset做运算会耗时比较久,也就意味着阻塞redis的可能性增加。
(3)网络阻塞:每次获取bigkey产生的网络流量较大。
(4)CPU飙升:对bigkey序列化反序列化导致CPU飙升。

解决bigkey

(1)优雅的kye结构的设计
key可以遵循下面几个约定:
遵循基本格式:[业务名称]:[数据名]:[id]
长度不超过44字节
不包含特殊字符
(2)拆分
对big key存储的数据(big value)进行拆分,变成value1、value2、valuen等等。
例如big value是个大json通过mset的方式,将这个key的内容打散到各个实例中,或者一个hash,每个field代表一个具体属性,通过hget、hmget获取部分value,hset,hmset来更新部分属性。
例如big value是个大list,可以将list拆成多个list。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值