redis-热key大key
Published on 2024-08-30 17:16 in Loading... with 早点下班回家吃饭叻

redis-热key大key

BIG KEY

作者:w08e

Big key , hot key 傻傻分不清楚

什么是大key

Redis 中的 "大 Key" 通常指的是一个占用较大内存空间的键(Key)。这可能会对 Redis 的性能产生负面影响,因为大 Key 可能导致内存碎片化、删除延迟以及网络传输时间延长等问题。

大 Key 可能出现在不同的场景中,例如:

  • 大型字符串
  • 大型列表
  • 大规模哈希表

可以通过redis内置bigkeys 获取整体统计情况

风险

大 Key 可能会导致以下问题:

  • 内存碎片化:大 Key 占用的内存块较大,可能导致内存碎片化,从而影响 Redis 的内存使用效率。

  • 网络传输延迟:传输大 Key 的数据可能会导致较长的网络传输时间,特别是在进行备份、迁移或从节点同步等操作时。

  • 删除阻塞:在删除大 Key 的过程中,可能会导致其他操作的响应时间变长。这是因为在删除大 Key 时,需要遍历键中的所有元素,并在内部进行相应的清理操作。在此期间,其他操作会等待删除操作完成。

  • 持久化延迟:如果 Redis 实例使用了持久化机制(如 RDB 快照或 AOF 日志),删除大 Key 可能会导致持久化操作的延迟,因为持久化过程也需要处理大 Key 的数据。

解决

img

HOT KEY

什么是热key

与大 Key 一样,热 Key 没有一个明确定义,通常情况下,当某个 Key 的请求频率显著高于其他 Key 时,我们就可以将其视为热 Key。

热 Key 可能会引发多种问题,包括占用大量的 CPU 资源从而影响 Redis 的吞吐量,或者在集群中可能导致流量不均衡,形成读写热点问题等。

Redis 从版本 4.0 开始引入了 hotkey 命令,允许通过客户端的 redis-cli --hotkeys 命令扫描库中的所有热点 Key。

解决

  1. 读写分离

  2. 热key备份

    我们可以将热 Key 复制到多个 Redis 实例,并在请求时随机选择一个备份实例来分散请求压力。

    比如,假如现有热 Key "foo",我们将其复制到三个分片中,分别叫做 foo_1、foo_2 与 foo_3,当请求 "foo" 时,我们为其随机添加一个后缀,从而实现分散请求压力的效果:

  3. 二级缓存

    对于一些热 Key,我们可以考虑使用一些本地缓存工具(比如 Guava 或 Ehcache) 直接将其缓存到 JVM 内存中,从根本上避免对 Redis 造成压力。

    不过,这种方案下缓存会占用额外的运行时内存,因此需要有选择进行缓存,以避免占用过多内存资源。并且当与 Redis 缓存共用时,也要考虑数据一致性问题。

posted @   早点下班回家吃饭叻  阅读(104)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示