当前位置: 首页 > article >正文

Redisson实战:分布式系统中的五大典型应用场景

引言

在分布式系统架构中,数据一致性、高并发控制和资源协调是开发者面临的核心挑战。Redisson作为基于Redis的Java客户端,不仅提供了丰富的分布式对象和服务,还简化了分布式场景下的编程模型。本文将通过实际代码示例,解析Redisson在真实项目中的五大典型应用场景。


场景一:分布式锁实现秒杀库存控制

背景:电商秒杀活动中,防止超卖是关键。传统的本地锁无法跨JVM生效,需借助分布式锁。

Redisson方案:使用RLock实现可重入锁,支持自动续期和超时释放。

// 获取锁对象
RLock lock = redissonClient.getLock("seckill:lock:" + productId);
try {// 尝试加锁,最多等待100ms,锁自动释放时间30sif (lock.tryLock(100, 30000, TimeUnit.MILLISECONDS)) {// 执行库存扣减逻辑int stock = Integer.parseInt(redisTemplate.opsForValue().get("stock"));if (stock > 0) {redisTemplate.opsForValue().set("stock", String.valueOf(stock - 1));}}
} finally {if (lock.isHeldByCurrentThread()) {lock.unlock();}
}

优势

  • 自动续期避免业务未完成锁过期

  • 支持看门狗机制防止死锁

  • 相比原生Redis命令,API更简洁


场景二:多节点共享数据(分布式集合)

背景:跨服务的Session管理需要共享数据,且需保证原子性操作。

Redisson方案:使用RMap实现分布式Map,支持本地缓存和淘汰策略。

RMap<String, UserSession> sessionMap = redissonClient.getMap("global:sessions");// 添加会话(自动序列化)
sessionMap.put(sessionId, new UserSession(userId, System.currentTimeMillis()));// 带过期时间的原子操作
sessionMap.expire(30, TimeUnit.MINUTES);// 遍历所有活跃会话
sessionMap.readAllValues().forEach(session -> System.out.println("活跃用户:" + session.getUserId()));

扩展应用

  • 全局配置中心

  • 分布式统计计数器

  • 实时排行榜(配合RScoredSortedSet

场景三:API限流保护系统

背景:防止恶意请求压垮核心接口,需实现每秒最多100次调用。

Redisson方案:采用RRateLimiter实现令牌桶限流。

RRateLimiter rateLimiter = redissonClient.getRateLimiter("api:limit:orderCreate");
// 初始化:每秒补充100个令牌,最大累积100个
rateLimiter.trySetRate(RateType.OVERALL, 100, 1, RateIntervalUnit.SECONDS);if (rateLimiter.tryAcquire(1)) {// 处理订单创建逻辑
} else {throw new RuntimeException("请求过于频繁");
}

进阶配置

  • 按用户/IP维度限流

  • 结合Spring AOP实现注解式限流

  • 滑动时间窗口统计


场景四:分布式任务调度

背景:需要跨多个服务节点执行定时任务,且保证单实例运行。

Redisson方案:使用RScheduledExecutorService替代Quartz。

RScheduledExecutorService executor = redissonClient.getExecutorService("taskExecutor");// 注册每天凌晨执行的报表生成任务
executor.scheduleAtFixedTime(() -> generateDailyReport(),LocalTime.of(0, 5).toSecondOfDay(),  // 00:05执行TimeUnit.DAYS.toSeconds(1),          // 间隔24小时TimeUnit.SECONDS
);// 查看任务状态
Set<ScheduledTask> tasks = executor.getScheduledTasks();

优势

  • 故障转移自动切换节点

  • 任务状态持久化

  • 支持Cron表达式


场景五:发布订阅实现实时通知

背景:订单状态变更后需实时通知多个子系统(物流、营销等)。

Redisson方案:通过RTopic实现跨服务消息广播。

发布端

RTopic topic = redissonClient.getTopic("order:statusChanged");
long clientsReceived = topic.publish(new OrderEvent(orderId, "PAID"));

订阅端

RTopic topic = redissonClient.getTopic("order:statusChanged");
topic.addListener(OrderEvent.class, (channel, msg) -> {log.info("收到订单{}状态更新:{}", msg.getOrderId(), msg.getStatus());// 触发后续处理逻辑
});

特点

  • 支持集群模式下的跨节点通信

  • 消息持久化可配置

  • 相比传统MQ更轻量


配置Redisson客户端

Spring Boot集成示例:

# application.yml
spring:redis:host: redis-cluster.example.comport: 6379
@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useClusterServers().addNodeAddress("redis://redis-cluster.example.com:6379").setPassword("your_password").setTimeout(3000);return Redisson.create(config);}
}

注意事项

  1. 合理设置TTL避免内存泄漏

  2. 集群模式下避免大Key影响性能

  3. 使用连接池优化资源消耗

  4. 监控慢查询和内存使用


总结

Redisson通过丰富的分布式对象(锁、集合、队列等)和易用的API,显著降低了分布式系统的开发复杂度。本文演示的五大场景仅是Redisson能力的冰山一角,更多特性如布隆过滤器、分布式信号量等,等待开发者进一步探索。

相关文章:

Redisson实战:分布式系统中的五大典型应用场景

引言 在分布式系统架构中&#xff0c;数据一致性、高并发控制和资源协调是开发者面临的核心挑战。Redisson作为基于Redis的Java客户端&#xff0c;不仅提供了丰富的分布式对象和服务&#xff0c;还简化了分布式场景下的编程模型。本文将通过实际代码示例&#xff0c;解析Redis…...

12N60-ASEMI无人机专用功率器件12N60

编辑&#xff1a;LL 12N60-ASEMI无人机专用功率器件12N60 型号&#xff1a;12N60 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 最大漏源电流&#xff1a;12A 漏源击穿电压&#xff1a;600V 批号&#xff1a;最新 RDS&#xff08;ON&#xff09;Max&#xff1a;0.68…...

长城智驾重复造轮子

左手新能源&#xff0c;右手智驾&#xff0c;这是长城当下最在意的两块业务。 从去年8月首款具备高阶智能驾驶功能SUV全新蓝山上市之后&#xff0c;长城在传播端的重点就是围绕智驾、无图方案打造智驾标签。 先是在广州国际车展上&#xff0c;整个展厅只展出全新蓝山&#xf…...

云原生之认识DDD

一、DDD是什么? 领域驱动设计(DDD) 做为一种软件工程的方法论,它可以帮助我们设计高质量的软件,或者说任何工程的设计都需要方法论,不论是城市设计、建筑设计、室内设计。 比如没有方法论的情况下楼是可以盖起来的,或许整个楼道和窗户上挂满了电话线、闭路线、电线?下水…...

continue插件实现IDEA接入本地离线部署的deepseek等大模型

文章目录 前言一、IDEA安装continue二、continue部署本地大模型三、continue聊天窗口使用deepseek R1四、continue批量接入硅基流动的模型API 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加关注哦&#xff0c;您的关注是我…...

代码随想录算法训练营第一天:数组part1

今日学习的文章链接和视频链接 ● 自己看到题目的第一想法 ● 看完代码随想录之后的想法 ● 自己实现过程中遇到哪些困难 ● 今日收获&#xff0c;记录一下自己的学习时长 状态 思路理解完成 30% 代码debug完成 60% 代码模板总结并抽象出来 100% 题目 704 二分查找 题目链接…...

滚珠螺杆在数控机床中如何降低摩擦系数?

对数控机床这样要求加工精度高而且加工精度能保持长期稳定的设备来说是必须的&#xff0c;而且具有较低的传动阻力也同时为更高速的传动打下基础。使用滚珠螺杆&#xff0c;也是数控机床加工效率高的一个重要原因&#xff0c;为了减少数控机床的滚珠螺杆出现摩擦&#xff0c;可…...

【现代深度学习技术】循环神经网络05:循环神经网络的从零开始实现

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...

Python实现技能记录系统

Python实现技能记录系统 来自网络&#xff0c;有改进。 技能记录系统界面如下&#xff1a; 具有保存图片和显示功能——允许用户选择图片保存&#xff0c;选择历史记录时若有图片可预览图片。 这个程序的数据保存在数据库skills2.db中&#xff0c;此数据库由用Python 自带的…...

前端基础之《Vue(10)—过滤器》

一、过滤器 1、作用 用于数据处理。 2、全局过滤器 使用Vue.filter(名称, val>{return newVal})定义。 在任何组件中都可以直接使用。 3、局部过滤器 使用选项&#xff0c;filters: {}定义&#xff0c;只能在当前组件中使用。 4、过滤器在Vue 3.0中已经淘汰了 5、过滤器…...

Linux常见指令介绍下(入门级)

1. head head就和他的名字一样&#xff0c;是显示一个文件头部的内容&#xff08;会自动排序&#xff09;&#xff0c;默认是打印前10行。 语法&#xff1a;head [参数] [文件] 选项&#xff1a; -n [x] 显示前x行。 2. tail tail 命令从指定点开始将文件写到标准输出.使用t…...

VIC-3D非接触全场应变测量系统用于小尺寸测量之电子元器件篇—研索仪器DIC数字图像相关技术

在5G通信、新能源汽车电子、高密度集成电路快速迭代的今天&#xff0c;电子元件的尺寸及连接工艺已进入亚毫米级竞争阶段&#xff0c;这种小尺寸下的力学性能评估对测量方式的精度有更高的要求&#xff0c;但传统应变测量手段常因空间尺寸限制及分辨率不足难以捕捉真实形变场。…...

字典与集合——测试界的黑话宝典与BUG追捕术

主题&#xff1a;“字典是测试工程师的暗号手册&#xff0c;集合是BUG的照妖镜” 一、今日目标 ✅ 掌握字典的「键值对暗号体系」与集合的「去重妖法」✅ 开发《测试工程师黑话词典》&#xff0c;让新人秒变老司机✅ 统计自动化测试结果中的高频BUG类型&#xff08;附赠甩锅指…...

下篇:深入剖析 BLE GATT / GAP / SMP 与应用层(约5000字)

引言 在 BLE 协议栈的最上层,GAP 定义设备角色与连接管理,GATT 构建服务与特征,SMP 负责安全保障,应用层则承载具体业务逻辑与 Profile。掌握这一层,可实现安全可靠的设备发现、配对、服务交互和定制化业务。本文将详解 GAP、GATT、SMP 三大模块,并通过示例、PlantUML 时…...

事务详细介绍

一、简介 1、什么是事务 事务是指一组操作&#xff0c;这些操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;保证数据的完整性和一致性。事务广泛应用于数据库管理系统、分布式系统和企业级应用中&#xff1b; 2、事务的特性 事务具有四个基本特性&#xff0c;…...

PostgreSQL 中的权限视图

PostgreSQL 中的权限视图 PostgreSQL 提供了多个系统视图来查询权限信息&#xff0c;虽然不像 Oracle 的 DBA_SYS_PRIVS 那样集中在一个视图中&#xff0c;但可以通过组合以下视图获取完整的系统权限信息。 一 主要权限相关视图 Oracle 视图PostgreSQL 对应视图描述DBA_SYS_…...

Python-36:饭馆菜品选择问题

问题描述 小C来到了一家饭馆&#xff0c;这里共有 nn 道菜&#xff0c;第 ii 道菜的价格为 a_i。其中一些菜中含有蘑菇&#xff0c;s_i 代表第 ii 道菜是否含有蘑菇。如果 s_i 1&#xff0c;那么第 ii 道菜含有蘑菇&#xff0c;否则没有。 小C希望点 kk 道菜&#xff0c;且希…...

27、Session有什么重⼤BUG?微软提出了什么⽅法加以解决?

Session的重大BUG 1、进程回收导致Session丢失 原理&#xff1a; IIS的进程回收机制会在系统繁忙、达到特定内存阈值等情况下&#xff0c;自动回收工作进程&#xff08;w3wp.exe&#xff09;。由于Session数据默认存储在进程内存中&#xff0c;进程回收时这些数据会被清除。 …...

图论---Bellman-Ford算法

适用场景&#xff1a;有边数限制 ->&#xff08;有负环也就没影响了&#xff09;&#xff0c;存在负权边&#xff0c;O( n * m )&#xff1b; 有负权回路时有的点距离会是负无穷&#xff0c;因此最短路存在的话就说明没有负权回路。 从1号点经过不超过k条边到每个点的距离…...

复杂性决策-思维训练

思维训练 1.模式识别 观察、复杂、不确定、波动、模糊 –找出必要和非必要因素 –识别重大威胁和机遇 2.系统分析 为复杂情景构建系统心智模型 利用模型识别模式做出预测&#xff0c;指定有效策略 3.心智敏锐度 利用不同层次的分析探索挑战的能力&#xff0c;对其他利益相关方在…...

云智融合普惠大模型AI,政务服务重构数智化路径

2025年是“十四五”收官之年&#xff0c;数字政府和政务数智化作为“数字中国”建设的重点&#xff0c;已经取得了显著成效。根据《联合国电子政务调查报告2024》&#xff0c;我国电子政务发展指数全球排名第35位&#xff0c;与2022年相比提升8个名次&#xff1b;其中&#xff…...

反爬系列 IP 限制与频率封禁应对指南

在数据采集领域&#xff0c;IP 限制与频率封禁是反爬机制中最常见的防御手段。随着网站安全策略的升级&#xff0c;单靠传统爬虫技术已难以应对高强度的检测。本文将从反爬机制解析、实战应对策略两个维度&#xff0c;系统讲解如何突破 IP 限制与频率封禁。 一、反爬机制解析 …...

Redis Cluster 使用 CRC16 算法实现 Slot 槽位分片的核心细节

一、CRC16 算法作用原理 哈希计算流程‌ 对键值&#xff08;Key&#xff09;执行 ‌CRC16 算法‌&#xff0c;生成 16 位校验值&#xff08;0~65535&#xff09;。 将校验值 ‌对 16384 取模‌&#xff08;公式&#xff1a;slot CRC16(key) % 16384&#xff09;&#xff0c;…...

Java基础集合 面试经典八股总结 [连载ing]

序言 八股&#xff0c;怎么说呢。我之前系统学习的内容&#xff0c;进行梳理。通过问题的方式&#xff0c;表达出得当的内容&#xff0c;这件事本身就很难。面试时心态、状态、掌握知识的情况等。关于八股文&#xff0c;我不想有太多死记硬背的内容&#xff0c;更多的是希望自我…...

如何将极狐GitLab 议题导出为 CSV?

极狐GitLab 是 GitLab 在中国的发行版&#xff0c;关于中文参考文档和资料有&#xff1a; 极狐GitLab 中文文档极狐GitLab 中文论坛极狐GitLab 官网 导出议题到 CSV (BASIC ALL) 您可以将问题从极狐GitLab 导出为 CSV 文件&#xff0c;这些文件将作为附件发送到您的默认通知…...

UE5 调整字体、界面大小

文章目录 方案一 5.4 版本及以上&#xff08;推荐&#xff09;方案二 5.3 版本及以下&#xff08;推荐&#xff09;方案三 使用插件&#xff08;不推荐&#xff09; 方案一 5.4 版本及以上&#xff08;推荐&#xff09; 进入 编辑 > 编辑器偏好设置&#xff0c;如下图所示&…...

Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)

一、Cordova 1、Cordova 概述 Cordova 是使用 HTML&#xff0c;CSS 和 JavaScript 构建混合移动应用程序的平台 2、Cordova 特征 &#xff08;1&#xff09;命令行界面&#xff08;Cordova CLI&#xff09; 这是可用于启动项目&#xff0c;构建不同平台的进程&#xff0c;…...

Docker Compose 和 Kubernetes(k8s)区别

前言&#xff1a;Docker Compose 和 Kubernetes&#xff08;k8s&#xff09;是容器化技术中两个常用的工具&#xff0c;但它们的定位、功能和适用场景有显著区别。以下是两者的核心对比&#xff1a; ​​1. 定位与目标​​ ​​特性​​ ​​Docker Compose​​ ​​Kubernet…...

抽象类相关

抽象类的定义 抽象类 是一种特殊的类&#xff0c;它不能被实例化&#xff0c;只能作为基类来派生出具体类。抽象类至少包含一个纯虚函数 。纯虚函数是在函数原型前加上 0 的虚函数&#xff0c;表示该函数没有具体实现&#xff0c;必须由派生类来实现。 抽象类的作用 提供统…...

十分钟恢复服务器攻击——群联AI云防护系统实战

场景描述 服务器遭遇大规模DDoS攻击&#xff0c;导致服务不可用。通过群联AI云防护系统的分布式节点和智能调度功能&#xff0c;快速切换流量至安全节点&#xff0c;清洗恶意流量&#xff0c;10分钟内恢复业务。 技术实现步骤 1. 启用智能调度API触发节点切换 群联系统提供RE…...