Redis中BigKey的分析与优化_redis大key优化,2024年最新一篇文章帮你解答

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

cursor, keys = redis_conn.scan(cursor=cursor, count=1000) # 分批迭代keys
for key in keys:
size = redis_conn.memory_usage(key)
if size > threshold:
big_keys.append((key, size))
return big_keys

打印出所有大于1MB的key

for key, size in find_big_keys(r, 1024 * 1024):
print(f"BigKey: {key}, Size: {size}")

还可以使用异步任务,将得到的key放到指定的地方进行存储,方便后面分析处理

这里使用SCAN命令而非KEYS命令,因为SCAN命令是基于游标的迭代器,可以分批次迭代keys,减少对内存的冲击。

这个脚本分批迭代所有的keys,并且仅在发现超过指定大小的key时才会将其信息打印出来或者进行其他操作。
通过设置count参数,你可以根据你的Redis服务器的具体情况来调整每批次处理的keys数量,以达到在不影响Redis性能的前提下完成BigKeys的检测。此外,这个脚本应该在Redis的负载较低时运行,以最小化其对生产环境的影响。

BigKey的产生原因

1、 不合理的数据设计
一个典型的例子是将用户的所有行为数据存放在一个大的List中,而不是分拆成多个小List按时间或者事件类型存储。

2、 业务逻辑变化
随着业务发展,原本预计不会存储大量数据的Key,可能因为用户量的增长或业务逻辑的变化变成了BigKey。

3、 缺失的监控预警
没有及时地监控和预警系统的话,一旦数据量异常增长,就可能产生BigKey,而未能及时发现。

BigKey带来了什么样的问题

1、 性能问题
由于Redis的单线程模型,BigKey的操作可能会阻塞其他命令的执行,造成明显的延迟。

2、 资源消耗
BigKey占用大量内存,可能会导致内存溢出或者其他数据的驱逐。

3、 数据管理问题
BigKey会给数据迁移工作带来挑战,特别是在使用Redis集群时。

BigKey的处理方案

1、 切割大key
可以将一个大的Hash表切割成多个小Hash表,每个Hash表存储一部分数据。

2、 删除或过期
可以对BigKey进行渐进式删除,避免一次性删除造成服务的长时间阻塞。

redis-cli --eval del_big_key.lua , bigkey_name

3、 使用合适的命令
使用Scan系列命令进行数据处理,避免一次性操作大量数据。

redis-cli scan 0 match * count 1000

如何有效避免BigKey产生的策略

1、 合理的数据模型设计
根据业务需求选择合理的数据类型,例如使用小Hash代替大String。
Redis为Hash类型的字段使用了特殊的编码方式,如ziplist或hashtable,这些编码方式可以在保持较小内存占用的同时存储相对较小的值。
当Hash中的元素数量和单个元素的大小达到一定阈值时,Redis会自动从ziplist转换为hashtable,这种优化能够有效利用内存。

 

2、 强化监控预警机制
利用Redis自带的监控工具或第三方监控工具,如 Prometheus + Grafana,及时发现异常。

 

3、 定期的性能评估与优化
定期进行性能评估,及时对数据模型进行调整。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记和面经,一下子打通了我的任督二脉,进大厂原来没那么难。

这是大佬写的, 7701页的阿里大佬写的刷题笔记,让我offer拿到手软

总结

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
中…(img-LrKY3q99-1713357835004)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值