如何在Dubbo框架中针对Redis热点服务调用进行限流防击穿?

阿静同学_8585

阿静同学_8585

2026-10-27

359人浏览

原创

Dubbo 无法直接对 Redis 热点 Key 限流,因其不感知 Redis 层逻辑;需通过 @SentinelResource 透传参数,配合 Sentinel 热点规则、Redis 逻辑过期与分布式锁四层联动才能有效防护。

如何在dubbo框架中针对redis热点服务调用进行限流防击穿?

为什么 Dubbo 直接连 Redis 热点 Key 不行

Dubbo 本身不处理 Redis 层的缓存逻辑,它只管服务间 RPC 调用。所谓“Redis 热点服务调用”,实际是指:某个 Dubbo 接口(比如 getProductDetail(String productId))内部查 Redis,而这个 productId 是热点,缓存过期瞬间大量请求穿透——这问题出在业务代码里,不是 Dubbo 能自动感知或拦截的。

直接在 Dubbo 层对 Redis Key 做限流会失效,因为:

  • Dubbo 的 tps 过滤器只统计接口整体 QPS,无法识别不同 productId 的访问频次差异
  • ExecuteLimitFilter 控制的是并发线程数,对缓存击穿这种“同一 Key 大量串行请求打库”场景无感
  • Redis 本身没把 Key 级别流量暴露给 Dubbo,两者不在同一观测平面

必须把热点参数透传到 Sentinel 或 AHAS

要实现“按 productId 限流”,得让限流组件知道你在调用哪个 Key。Dubbo 提供了天然埋点能力,但需要显式配合:

  • 用 @SentinelResource 注解标记方法,并确保参数顺序和索引明确(productId 是第 0 个参数)
  • 在 SphU.entry() 手动传参时,args 必须是基本类型或 String;若传对象,Sentinel 无法提取字段值做热点判断
  • AHAS 控制台配置热点规则时,“参数索引”填 0,“QPS 阈值”设为比如 100,“例外项”可加白名单如 "10001"(运营后台 ID)

示例关键代码:

@SentinelResource(value = "getProductDetail", blockHandler = "handleBlock")
public Product getProductDetail(String productId, int version) {
    // productId 将作为热点参数被 Sentinel 统计
    return cacheService.getFromRedis(productId);
}

Redis 层必须配逻辑过期 + 互斥锁兜底

仅靠 Dubbo 上游限流不够。一旦 Sentinel 拦截失败(比如误判、规则未生效),或者缓存刚重建完成又遭遇新一波请求,击穿仍会发生。所以 Redis 层必须有第二道防线:

redis-tools
redis-tools

按类别查找Redis命令、检测服务器连接、监控键数量和内存占用,支持离线速查表。

下载
  • 缓存写入时存两个字段:product:10001(真实数据) + product:10001:expire(时间戳,比 TTL 多延 2 分钟)
  • 读取时先检查 :expire 字段是否过期;若已过期,用 Redisson 的 RLock.tryLock(3, 10, TimeUnit.SECONDS) 抢锁
  • 抢到锁的线程异步重建缓存,其他线程返回旧值(允许短暂脏读)或降级兜底(如本地缓存)

注意:不要用 SETNX + DEL 组合实现锁,没有自动续期,Dubbo 接口超时(常见 3s)后锁可能提前释放,导致重复重建。

监控和压测验证不能跳过

线上配置完热点规则,不代表万事大吉。最容易被忽略的是验证环节:

  • 用 curl -X POST http://localhost:8719/clusterNode?resource=your-resource-name 查看 Sentinel 实时统计,确认 hotItems 列表里真有 productId 出现
  • 压测时故意让缓存过期,观察数据库慢 SQL 是否归零、Redis GET 命中率是否回升到 99%+、Sentinel 控制台是否出现 blockQps 计数
  • 如果 blockQps 一直为 0,大概率是参数没传进去,或用了包装类(如 Integer 而非 int),Sentinel 默认不支持

真正防住击穿,靠的不是某一个开关,而是 Dubbo 参数透传 + Sentinel 热点规则 + Redis 逻辑过期 + 分布式锁四层联动。少一层,都可能在凌晨三点收到告警电话。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis 热点

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
dubbo和zookeeper有什么区别
dubbo和zookeeper有什么区别

dubbo和zookeeper的区别:1、功能定位;2、使用场景;3、数据存储与协调;4、集成与关系;5、性能与可靠性;6、扩展性与灵活性;7、社区与生态系统。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

656

5

springcloud和dubbo有哪些区别
springcloud和dubbo有哪些区别

springcloud和dubbo的区别:1、定位与关注点;2、生态环境与集成性;3、调用方式与性能;4、组件与功能;5、定制性与灵活性;6、学习曲线与上手难度;7、社区支持与维护。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

276

5

dubbo原理和机制是什么
dubbo原理和机制是什么

dubbo原理和机制的解释:1、核心组件;2、通信原理;3、集群容错;4、自动发现与注册;5、负载均衡与路由;6、序列化与传输;7、监控与日志;8、扩展性;9、安全性;10、与spring集成等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

181

4

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4649

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

4215

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

7912

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

643

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

776

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

7962

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习