Redis热点key解决方案

简介: 本文介绍了Redis中热点Key的产生原因及解决方案。热点Key通常由用户访问集中或数据分片不均导致,可能引发流量过载、缓存穿透等问题。文章详细分析了多种应对策略,包括服务端缓存、使用Memcache/Redis、本地缓存以及随机后缀法,并探讨了各方案的优缺点和适用场景,旨在帮助开发者有效应对高并发下的缓存热点问题。

Redis热点key解决方案

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

  • 🚀 魔都架构师 | 全网30W技术追随者
  • 🔧 大厂分布式系统/数据中台实战专家
  • 🏆 主导交易系统百万级流量调优 & 车联网平台架构
  • 🧠 AIGC应用开发先行者 | 区块链落地实践者
  • 🌍 以技术驱动创新,我们的征途是改变世界!
  • 👉 实战干货:编程严选网

1 热点key产生原因

1.1 用户消费的数据>>>生产的数据

如秒杀活动、热点微博、热评,某件商品被数万次点击浏览或购买时,就会造成热点问题。

被大量发布、浏览的热点新闻、热点评论等读多写少场景也会产生热点问题。

1.2 请求的分片过于集中,突破单点性能极限

服务端读数据进行访问时,往往会对数据进行分片,此过程中会在某主机 Server 上对相应 Key 进行访问,当访问超过 Server 极限,就会导致热点Key。

2  热点Key危害

  • 流量过集中,突破网卡极限
  • 请求过多,缓存分片服务被打垮
  • 穿透DB

当某热点Key请求在某主机上,超过该主机网卡上限时,由于流量过集中,导致服务器中其它服务无法正常进行。 -> 热点过集中,热点Key缓存过多,超过目前的缓存容量,导致缓存分片服务被打垮。 -> 缓存服务崩溃,再有请求产生,会缓存到后台DB,导致缓存穿透,进一步导致缓存雪崩。

3 解决方案

主要对客户端、Server端改造。

3.1 服务端缓存方案

Client会将请求发送到Server,而Server是多线程服务,本地有个基于Cache LRU策略的缓存空间。当Server本身拥堵时,Server不会将请求进一步发送给DB而是直接返回,仅当Server本身畅通时才会将Client请求发送至DB,并且将该数据重新写入缓存。

此时就完成缓存的访问和重建。

缺陷

  • 缓存失效,多线程构建缓存问题
  • 缓存丢失,缓存构建问题
  • 脏读

3.2 使用Memcache、Redis

在客户端单独部署缓存。使用过程中Client首先访问服务层,再对同一主机上的缓存层进行访问。该种解决方案就近访问、速度快、无带宽限制。但也有问题:

  • 内存资源浪费
  • 脏读

3.3 本地缓存

缺陷

  • 需提前获知热点
  • 缓存容量有限
  • 不一致性时间增长
  • 热点Key遗漏

3.4 随机后缀

使用Redis做缓存,将一个热点Key的缓存查询压力,分散到多个Redis节点。

加随机后缀。

场景

在一个非常热点的数据,数据更新不频繁,但查询频繁,要保证基本保证100%的缓存命中率,该怎么处理?

核心思想:空间换时间,即同一热点key保留2份:

  • 不带后缀:有TTL
  • 带后缀:没有TTL

先查询不带后缀的,查询不到,则:

  1. 后端查询DB更新缓存
  2. 查询带后缀返回给调用方

即可尽可能避免缓存击穿。

参考:

目录
相关文章
|
7月前
|
存储 弹性计算 数据库
2026年阿里云 99 元服务器(ECS 经济型 e 实例)解析测评:配置、性能与适用场景
阿里云 99 元 / 年的服务器为 ECS 经济型 e 实例,凭借 “新老同享、续费不涨价” 的特点,成为个人开发者与小微企业入门上云的高性价比选择。该实例聚焦轻量计算场景,以 2 核 2G 算力、3M 固定带宽与 40G ESSD 存储为核心配置,兼顾基础性能与成本控制,以下从配置细节、性能表现、适用场景及购买规则展开解析。
|
8月前
|
监控 Java 测试技术
OOM排查之路:一次曲折的线上故障复盘
本文分享了一次线上服务因Paimon与RocksDB集成引发的三次内存溢出(OOM)故障排查全过程。从线程暴增到堆外内存泄漏,团队历经曲折,结合MAT、NMT、async-profiler等工具,最终定位至SDK中RocksDB通过JNI申请内存未释放的问题,并通过架构优化彻底解决。文章系统梳理了排查思路与工具使用,为类似技术栈提供宝贵经验。
|
缓存 NoSQL Redis
Redis缓存雪崩、缓存穿透、缓存击穿解决方案详解
本文详解Redis缓存雪崩、穿透与击穿问题及其解决方案,涵盖差异化过期时间、互斥锁、布隆过滤器等策略,提升系统稳定性与性能。
1008 0
Redis缓存雪崩、缓存穿透、缓存击穿解决方案详解
|
存储 安全 Java
synchronized原理详解(通俗易懂超级好)
当系统检查到锁是重量级锁之后,会把等待想要获得锁的线程进行阻塞,被阻塞的线程不会消耗cpu。但是阻塞或者唤醒一个线程时,都需要操作系统来帮忙,这就需要从用户态转换到内核态,而转换状态是需要消耗很多时间的,有可能比用户执行代码的时间还要长。
synchronized原理详解(通俗易懂超级好)
|
机器学习/深度学习 自然语言处理 算法
深度学习中的模型压缩技术:从理论到实践
随着深度学习技术的迅速发展,复杂的神经网络模型在许多任务中取得了显著成果。然而,这些模型通常参数量大,计算复杂度高,难以部署到资源受限的设备上。为了解决这个问题,模型压缩技术应运而生。本文将探讨几种主流的模型压缩方法,包括权重剪枝、量化和知识蒸馏,介绍其基本原理、实现步骤以及在实际应用中的效果。通过具体案例分析,我们将展示如何有效地使用这些技术来减少模型的大小和计算需求,同时保持甚至提升模型的性能。最后,我们将讨论当前模型压缩技术面临的挑战和未来的发展方向。
640 31
|
安全 Java Linux
JVM源码分析之Attach机制实现完全解读
JVM源码分析之Attach机制实现完全解读
JVM源码分析之Attach机制实现完全解读
|
人工智能
|
SQL 关系型数据库 MySQL
在 MySQL 中使用 Distinct
【8月更文挑战第12天】
2279 4
在 MySQL 中使用 Distinct
|
消息中间件 存储 缓存
美团面试: Kafka为啥能实现 10Wtps 到100Wtps ?kafka 如何实现零复制 Zero-copy?
40岁老架构师尼恩分享了Kafka如何实现高性能的秘诀,包括零拷贝技术和顺序写。Kafka采用mmap和sendfile两种零拷贝技术,前者用于读写索引文件,后者用于向消费者发送消息,减少数据在用户空间和内核空间间的拷贝次数,提高数据传输效率。此外,Kafka通过顺序写日志文件,避免了磁盘寻道和旋转延迟,进一步提升了写入性能。尼恩还提供了系列技术文章和PDF资料,帮助读者深入理解这些技术,提升面试竞争力。
美团面试: Kafka为啥能实现 10Wtps 到100Wtps ?kafka 如何实现零复制 Zero-copy?
|
移动开发 小程序 安全
使用阿里云短信+微信短链接跳转微信小程序
此内容是关于使用阿里云短信带传递参数的微信短链接跳转到微信小程序。首先,需要准备微信开发者工具和一个已认证的小程序。接着,开通云开发并配置云开发权限。然后,配置H5静态网页,包括设置云开发权限和处理不同设备的跳转方式。最后,上传云函数并修改其权限,获取微信短信链接,配置短链接参数,并开通阿里云短信服务以进行测试验证。整个过程涉及到了微信开发者工具、云开发、H5页面配置、云函数的创建和部署以及阿里云短信服务的开通和使用等步骤。
2877 0

相关产品

  • 云数据库 Tair(兼容 Redis)