拿个offer - 开源&项目实战 拿个offer - 开源&项目实战
首页
后端技术
🚀大话面试
  • 校&社招实战项目

    • 12306(铁路购票平台)
    • 短链接(Sass平台)
  • 社招进阶项目

    • 刚果商城(DDD领域驱动)
  • 基础架构项目

    • 幂等基础组件(支持接口及多种MQ)
    • 企业基础架构组件库
  • 校&社招实战项目

    • 12306(铁路购票平台) (opens new window)
    • 短链接(Sass平台) (opens new window)
  • 社招进阶项目

    • 刚果商城(DDD领域驱动) (opens new window)
加入群聊
🔋知识星球
代码仓库 (opens new window)
首页
后端技术
🚀大话面试
  • 校&社招实战项目

    • 12306(铁路购票平台)
    • 短链接(Sass平台)
  • 社招进阶项目

    • 刚果商城(DDD领域驱动)
  • 基础架构项目

    • 幂等基础组件(支持接口及多种MQ)
    • 企业基础架构组件库
  • 校&社招实战项目

    • 12306(铁路购票平台) (opens new window)
    • 短链接(Sass平台) (opens new window)
  • 社招进阶项目

    • 刚果商城(DDD领域驱动) (opens new window)
加入群聊
🔋知识星球
代码仓库 (opens new window)
  • 小册简介

    • 什么是大话面试
  • Redis

    • Redis为什么这么快?
    • Redis宕机数据会丢失么?
    • Redis的AOF是怎么实现的?
    • Redis的RDB是怎么实现的?
    • Redis如何实现到期删除的?
    • Redis常用内存淘汰策略?
    • Redis字符串底层数据结构?
    • Redis的压缩列表是什么?
    • Redis的跳表是什么?
    • Redis的ZSet底层是怎么实现的?
    • 什么是布隆过滤器?
    • 布隆过滤器容量如何评估?
    • 布隆过滤器容量不够用如何解决?
    • Redis节点CPU核数越高越好?
    • 为什么Redis不适合海量请求?
    • Redis如何应对海量请求?
    • 如何提升Redis批量访问性能?
  • 缓存

    • 如何解决缓存击穿?
    • 如何解决缓存穿透?
    • 如何解决缓存雪崩?
    • 如何解决大Key问题?
    • 缓存如何预热?
    • 如何发现缓存中热Key?
    • 如何解决热Key问题?
      • 回答话术
        • 1. 读写分离
        • 2. 热 Key 备份
        • 3. 二级缓存
    • 缓存与数据库一致性?
    • 先写DB再删除缓存解决一致性?
    • Binlog配合MQ如何解决一致性?
目录

如何解决热Key问题?

# 回答话术

# 1. 读写分离

当热 Key 来自于读请求时,可以考虑通过读写分离,并且增加更多的从节点来降低对单个实例的读请求压力。

这种方案的缺点在于,不是所有的业务都适合读写分离,并且集群架构的复杂度提升也会带来额外的运维压力。

# 2. 热 Key 备份

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

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

// 生成1到3的随机数
int randomValue = new Random().nextInt(3) + 1;
// 将随机数作为后缀拼接到key上
String updatedKey = key + "-" + randomValue;
// 将key作为Redis中的键,随机值作为值存入Redis
redisTemplate.opsForValue().get(updatedKey);

这种策略可以减轻对单个 Redis 实例的负载,但是在涉及到增删改操作时,需要考虑数据一致性问题。

# 3. 二级缓存

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

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

上次更新: 2023/11/06, 23:14:13
如何发现缓存中热Key?
缓存与数据库一致性?

← 如何发现缓存中热Key? 缓存与数据库一致性?→

Theme by Vdoing | Copyright © 2022-2023 马丁玩编程 | Apache2 License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式