Redisson学习专栏(一):快速入门及核心API实践

article/2025/8/19 19:17:14

文章目录

  • 前言
  • 一、Redisson简介
    • 1.1 什么是Redisson?
    • 1.2 解决了什么问题?
  • 二、快速入门
    • 2.1 环境准备
  • 2.2 基础配置
  • 三、核心API解析
    • 3.1 分布式锁(RLock)
    • 3.2 分布式集合
      • 3.2.1 RMap(分布式Map)
      • 3.2.2 RList(分布式列表)
      • 3.2.3 RDelayedQueue:延时队列实现
      • 3.2.4 限流器(RRateLimiter)
      • 3.2.5 原子操作(RAtomicLong)
      • 3.2.6 分布式锁(RLock)
      • 3.2.7 RBucket:分布式对象存储
      • 3.2.8 RReadWriteLock:分布式读写锁
  • 总结


前言

Redisson核心

在分布式系统的世界里,开发者的日常往往被琐碎的复杂性填满。想象一个典型的电商场景:凌晨的秒杀活动涌入十万用户,数据库在并发请求下摇摇欲坠;跨地域部署的微服务集群中,某个节点的配置更新总比其他节点慢半拍;定时任务在多台服务器上重复执行,日志混乱得如同纠缠的耳机线。这些场景的背后,是分布式环境下数据一致性、并发控制和系统协调的永恒难题。

传统解决方案往往让人陷入两难:依赖数据库事务虽能保证强一致性,却让性能断崖式下跌;手动实现分布式锁需要处理锁续期、可重入、故障恢复等细节,代码复杂度呈指数级增长;而基于消息队列的异步处理,又可能引发数据延迟和一致性问题。这种时候,开发者需要的不是一个临时拼凑的补丁方案,而是一套开箱即用的分布式系统工具箱。

这正是Redisson的价值所在。作为基于Redis的Java客户端,Redisson将分布式系统的核心需求——锁、队列、原子操作、数据同步——封装成简洁的API,让开发者像操作本地集合一样处理分布式资源。当你在代码中调用RLock.lock() 时,背后是自动续期的看门狗机制在守护锁的生命周期;当你使用RMap.put() 更新数据时,跨节点的监听器已在默默同步所有副本;当你通过RScheduledExecutorService调度任务时,分布式环境下的唯一性执行已悄然实现。

Redisson的独特之处在于它既保留了Redis的高性能基因,又弥补了原生Redis在分布式场景中的不足。它不只是一个连接Redis的桥梁,而是一套完整的分布式编程范式。从可重入锁到公平锁,从限流器到分布式计数器,从延迟队列到远程服务调用,这些功能不是简单的命令封装,而是经过多年生产环境验证的可靠性设计。

接下来Redisson的学习专栏带大家穿透Redisson的核心机制,这篇带领大家快速入门这门技术…


一、Redisson简介

1.1 什么是Redisson?

Redisson是一个基于Redis实现的Java驻内存数据网格(In-Memory Data Grid),它不仅提供了对Redis的基础操作支持,更重要的是为分布式系统开发提供了丰富的分布式服务。作为Redis官方推荐的Java客户端之一,Redisson在Jedis和Lettuce的基础上进行了更高层次的抽象。

版本支持:最新版支持Redis 2.8至7.0+的所有版本

核心特性:

  • 分布式对象(Distributed Objects)
  • 分布式集合(Distributed Collections)
  • 分布式锁(Distributed Locks)
  • 分布式服务(Distributed Services)
  • 支持Reactive编程
  • 与Spring框架深度集成

1.2 解决了什么问题?

在分布式系统架构中,开发者常面临以下挑战:

常见问题传统解决方案痛点Redisson解决方案
分布式锁需要手动实现锁续期、可重入等机制提供现成的RLock对象
限流控制需要编写复杂的Lua脚本内置RateLimiter组件
数据分片需要自行处理数据分布支持自动分片的集合类型
延迟队列需要组合多种数据结构提供RDelayedQueue实现
跨JVM缓存各节点缓存不一致支持分布式Map/Set

二、快速入门

2.1 环境准备

Maven依赖配置:

<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.23.4</version>
</dependency>

2.2 基础配置

单节点配置示例:

Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379").setPassword("your_password").setDatabase(0);RedissonClient redisson = Redisson.create(config);

集群模式配置:

Config config = new Config();
config.useClusterServers().addNodeAddress("redis://192.168.0.1:7001").addNodeAddress("redis://192.168.0.2:7002").setScanInterval(2000); // 集群状态扫描间隔

三、核心API解析

3.1 分布式锁(RLock)

典型应用场景:

  • 分布式定时任务调度
  • 库存扣减
  • 重要操作排他控制
RLock lock = redisson.getLock("orderLock");// 支持自动续期的加锁方式
lock.lock(30, TimeUnit.SECONDS); try {// 业务逻辑处理processOrder();
} finally {lock.unlock();
}// 尝试非阻塞加锁
if (lock.tryLock()) {try {// 获取锁成功处理} finally {lock.unlock();}
} else {// 获取锁失败处理
}

3.2 分布式集合

3.2.1 RMap(分布式Map)

RMap<String, Object> map = redisson.getMap("userCache");// 原子操作示例
map.putIfAbsent("user1", new User());
map.fastPutAsync("user2", new User());// 本地缓存支持(降低网络开销)
LocalCachedMapOptions options = LocalCachedMapOptions.defaults().cacheSize(1000).evictionPolicy(EvictionPolicy.LRU);
RMap<String, Object> localMap = redisson.getLocalCachedMap("localCache", options);

3.2.2 RList(分布式列表)

RList<Object> list = redisson.getList("messageQueue");// 批量操作
list.addAll(messages);
list.readAll().forEach(System.out::println);// 支持元素过期时间
list.add(new Message(), 1, TimeUnit.HOURS);

3.2.3 RDelayedQueue:延时队列实现

架构设计:
RDelayedQueue
代码应用:

// 创建目标队列
RBlockingQueue<String> destinationQueue = redisson.getBlockingQueue("orderQueue");// 创建延时队列(绑定目标队列)
RDelayedQueue<String> delayedQueue = redisson.getDelayedQueue(destinationQueue);// 添加延时任务(30分钟后执行)
delayedQueue.offer("order202305281234", 30, TimeUnit.MINUTES);// 消费者处理
new Thread(() -> {while (true) {String order = destinationQueue.take();processExpiredOrder(order);}
}).start();

3.2.4 限流器(RRateLimiter)

令牌桶算法实现:

RRateLimiter limiter = redisson.getRateLimiter("apiLimiter");// 初始化:每秒生成5个令牌
limiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);if (limiter.tryAcquire()) {// 处理请求
} else {// 限流处理
}

3.2.5 原子操作(RAtomicLong)

RAtomicLong counter = redisson.getAtomicLong("visitCounter");// 原子递增
long current = counter.incrementAndGet();// 分布式环境下的比较设置
counter.compareAndSet(expectedValue, newValue);

3.2.6 分布式锁(RLock)

分布式锁
关键方法详解:

// 创建可重入锁
RLock lock = redisson.getLock("resourceLock");// 1. 基础加锁(默认30秒有效期)
lock.lock(); // 2. 尝试加锁(等待时间,自动释放时间)
boolean res = lock.tryLock(10, 60, TimeUnit.SECONDS);// 3. 异步加锁
RFuture<Void> future = lock.lockAsync();// 4. 公平锁实现
RLock fairLock = redisson.getFairLock("fairLock");// 5. 联锁(MultiLock): 需所有锁都获取成功
RLock lock1 = redisson.getLock("lock1");
RLock lock2 = redisson.getLock("lock2");
RedissonMultiLock multiLock = new RedissonMultiLock(lock1, lock2);
multiLock.lock();

3.2.7 RBucket:分布式对象存储

RBucket是Redisson中最基础的分布式对象,提供了对任意Java对象的原子操作能力。它解决了分布式环境下对象存储的三大痛点:

  • 对象序列化与反序列化
  • 原子性更新保证
  • 生命周期管理(TTL)
RBucket<MyObject> bucket = redisson.getBucket("user:session:123");// 1. 基础存取操作
bucket.set(new MyObject("userData")); // 存储对象
MyObject obj = bucket.get();          // 获取对象// 2. 带TTL的存储(30分钟后过期)
bucket.set(new MyObject(), 30, TimeUnit.MINUTES);// 3. 比较并交换(CAS)原子操作
boolean updated = bucket.compareAndSet(currentObject,  // 当前预期值newObject       // 新值
);// 4. 获取并删除(原子操作)
MyObject deletedObj = bucket.getAndDelete();// 5. 非阻塞尝试设置
boolean success = bucket.trySet(new MyObject());// 6. 对象保留时间管理
bucket.remainTimeToLive(); // 获取剩余生存时间
bucket.expire(10, TimeUnit.MINUTES); // 重置过期时间

高级特性:

// 7. 对象监听(分布式通知)
bucket.addListener(new BucketListener<MyObject>() {@Overridepublic void onUpdate(BucketEvent<MyObject> event) {System.out.println("对象更新: " + event.getValue());}@Overridepublic void onDelete(BucketEvent<MyObject> event) {System.out.println("对象删除");}
});// 8. 对象引用(避免重复序列化)
RBinaryStream binaryBucket = redisson.getBinaryBucket("binaryData");
binaryBucket.set(serializedBytes); // 存储原始字节
byte[] data = binaryBucket.get();  // 获取原始字节

3.2.8 RReadWriteLock:分布式读写锁

在分布式环境中,读多写少场景下,传统互斥锁会成为性能瓶颈。读写锁实现了:

  • 读锁共享:多个客户端可同时获取读锁
  • 写锁排他:写锁获取时阻塞所有读/写操作
  • 锁降级:写锁可降级为读锁(避免死锁)

核心API详解:

RReadWriteLock rwLock = redisson.getReadWriteLock("documentLock");// 1. 基础锁获取
RLock readLock = rwLock.readLock();
RLock writeLock = rwLock.writeLock();// 2. 读锁使用(共享)
readLock.lock();
try {// 多个客户端可同时执行读取readDocument();
} finally {readLock.unlock();
}// 3. 写锁使用(排他)
writeLock.lock();
try {// 仅一个客户端可执行写入updateDocument();
} finally {writeLock.unlock();
}// 4. 尝试获取锁(带超时)
if (writeLock.tryLock(3, 10, TimeUnit.SECONDS)) {try {// 获取写锁成功} finally {writeLock.unlock();}
}// 5. 锁降级(写锁→读锁)
writeLock.lock();
try {// 执行写操作updateDocument();// 降级开始(保持写锁获取读锁)readLock.lock();
} finally {writeLock.unlock(); // 释放写锁但仍持有读锁
}try {// 此时其他线程可获取读锁但不能获取写锁readDocument();
} finally {readLock.unlock();
}

高级特性:

锁升级(危险操作):

// 注意:直接锁升级可能导致死锁!
readLock.lock();
try {// 错误方式(会导致死锁):// writeLock.lock(); // 正确方式:尝试升级if (writeLock.tryLock()) {try {// 升级成功} finally {writeLock.unlock();}} else {// 处理升级失败}
} finally {readLock.unlock();
}

总结

在分布式系统的复杂业务场景中,Redisson优雅解决并发控制、数据一致性和服务协调等问题。通过本文的探索,我们见证了Redisson如何将晦涩的分布式理论转化为简洁高效的Java API:

核心价值回顾:

  1. 分布式原语标准化
    • 从可重入锁到联锁,从公平锁到读写锁,Redisson将分布式锁的复杂度封装在RLock.lock()一行代码中
    • 自动续期的看门狗机制解决了锁超时导致的数据不一致痛点
  2. 数据一致性新范式
    • RMap的原子操作和本地缓存特性,让分布式集合操作如本地集合般自然
    • RDelayedQueue的延时队列设计,完美解决定时任务调度难题
  3. 分布式服务新境界
    • RRateLimiter的令牌桶算法实现优雅限流

资源指引:

  • 案例代码

下期预告:Redission核心功能深入学习(分布式锁、分布式集合)


http://www.hkcw.cn/article/auLsAfRNoP.shtml

相关文章

男子洗空调捅鼠窝 老鼠下饺子般逃散!

男子洗空调捅鼠窝 老鼠下饺子般逃散。5月28日,上海,男子清洗空调时捅了老鼠窝,6只老鼠掉下来四处逃散:吓死了!空调长期不用一定要定时清洗!事人说家里空调有声音,有点漏水,然后就打电话让修理空调的师傅来看一下,结果没有想到在修的过程中,一窝老鼠从空调中串了出来。…

2025年业财一体化如何重塑工程项目管理?

在工程项目管理领域&#xff0c;2025年被认为是数字化转型的关键节点。随着工程行业规模扩大、项目复杂度提升以及市场竞争加剧&#xff0c;传统管理模式已难以满足高效、精准、合规的需求。业财一体化作为数字化转型的核心驱动力&#xff0c;正在通过数据贯通、流程协同和智能…

70后存款多少才算有钱?银行人给出答案

70后存款多少才算有钱?银行人给出答案。我是个70后,70年代末出生,眼看着奔五的人了。最近网上一则消息挺扎心的,说是“70后存款曝光”,标题还特别刺眼——“多少存款才算有钱人?银行人给出答案,97%的人都不达标。”我点进去一看,说得还挺有道理,瞬间心头一紧,不由自主…

男子带不同小孩长期卖惨行乞 骗局曝光引关注

男子带不同小孩长期卖惨行乞骗局曝光引关注。近日,多名网友曝光了一名五六十岁的中年男子长期在郑州地铁内以“给孩子治病”等各种理由向乘客索要钱财。这名男子身边带的小孩还经常换人。一些网友表示曾出于爱心给过他钱,但后来多次发现该男子仍在行乞,并且每次的理由都不一…

React 生命周期与 Hook:从原理到实战全解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

中国驻美使馆回应撤销留学生签证 坚决反对美方做法

中国驻美使馆回应撤销留学生签证。中国驻美国大使馆发言人5月29日回应美国务院关于撤销中国在美留学生签证的声明,表示中方坚决反对这一政治性、歧视性的做法。美方此举将严重损害中国在美留学人员的正当合法权益,并进一步损害美国自身的国际形象和国家信誉。中国驻美使馆已向…

C# 事件的选择与使用

在C#中选择使用EventHandler还是自定义事件委托&#xff0c;取决于具体需求。以下是详细对比 一、决策指南 在 C# 中&#xff0c;EventHandler 是一个泛型委托&#xff0c;用于简化事件的定义和处理。它允许你创建带有自定义事件参数的事件&#xff0c;而不需要每次都定义新的…

蜜雪冰城回应3杯瘦4斤减肥法:没有任何功效只是比较好喝

蜜雪冰城回应3杯瘦4斤减肥法。近日,“蜜雪冰城减肥法”在社交平台流传,不少网友发帖称,一天依次饮用该品牌葡萄冰美式、茉莉奶茶、柠檬水,可实现“三杯瘦四斤。对此,医生提醒:此种减肥方式易引起脱发、低血糖等问题,减重过程中过程中不应该只关注体重,而应该采取科学的方…

深圳街头惊现科技石墩:能充电、会发光还能播视频!

深圳街头惊现科技石墩。“石墩子都能无线充电了?”“科技感满满!”“深圳果然先进!”……近日,一则深圳街头石墩具备无线充电功能的短视频在网络上引发网友惊叹。视频中,龙华区大浪街道后浪新天地路边,一排亮着灯的石墩旁,大人小孩尝试用石墩为手机无线充电,还有人驻足…

三格电子SG-UHF80系列超高频读写器——3米精准识别,开启工业级远距射频新纪元!

核心突破&#xff1a;远距读写&#xff0c;性能跃升 超长距识别&#xff1a;最远3米读取/1.5米写入距离&#xff0c;覆盖大型物流分拣、仓储管理场景。 毫秒级响应&#xff1a;单次读写周期≤800ms&#xff0c;满足高速流水线实时追踪需求。 功率精准调控&#xff1a;13~27dB…

【速通RAG实战:进阶】16、AI生成思维导图全技术解析

一、AI生成思维导图的底层技术逻辑 (一)知识结构化的核心流程 AI生成思维导图的本质是非结构化文本到结构化知识图谱的转化,其技术流程可拆解为五大核心环节: 1. 语义解析与实体抽取 多模态输入处理:支持文本(Markdown/Word/PDF)、语音(会议录音)、手写笔记(图片O…

男子称相伴12年妻子心脏停搏猝逝 回应是否再娶

山东一男子发布多条视频怀念亡妻,二人相恋十二年,28岁妻子死于心脏停搏,去世前一天(5月21日)还晒了老公送的花。当事人回应网友问是否会再娶:“我可能会娶,也可能不会娶,但我现在最大的职责是照顾好两个妈妈,因为我爱人和我都是独生子女。我从14岁就开始和她恋爱,自己…

清代合院将以618元起拍 引发广泛关注

江苏省扬州市一栋清代合院的网络拍卖活动近日引发广泛关注。该房产将于6月15日以618元的价格起拍。此前,该房产在4月和5月经历了两次流拍。4月2日,经过69次出价后,有竞买人以5401314元的价格拍下,但最终悔拍。5月6日,该房产再次开拍,起拍价为3283300元,最终无人出价流拍…

高架桥车道骤变致车辆失控坠下 致5人伤亡

5月19日,广东东莞环莞快速路虎门段发生一起触目惊心的交通事故:一辆行驶中的车辆因四车道突然缩减为三车道,失控冲出高架路面高坠,造成5人伤亡的惨剧。这起事件迅速引发公众对道路设计安全性的强烈质疑,更暴露了城市快速路管理中亟待填补的漏洞。致命设计:车道骤变成“隐…

北方人果然不擅长水战,跨越千年的地域技能密码

北方人果然不擅长水战!“北方兵不善水战”,跨越千年的地域技能密码。“北方兵遇水战显笨拙”,历史的经验揭示地域技能特点。感慨道,“曹操所言非虚,北方士兵在水上战斗确实有所不足”,这句话勾起了我们对赤壁之战的回忆,深刻体现了地域差异对军事技能的深远影响。其实,…

ADQ108-1通道8bit 6~7G USB2.0 PXIe cPCIe采集

技术参数 7 / 6.4 / 6 GSPS采样率8位分辨率2 GHz模拟带宽内部和外部时钟参考时钟参考输出外部触发输入和输出Multi record >1 MHz PRF时间戳1G缓存数据接口USB 2.0 / cPCIe / PXIe支持C/C和MATLAB应用支持C/C和MATLAB ADQ108数字化仪具有单通道、8通道 位&#xff0c;最高7…

作家获奖后追忆已故女友 余华回应 感人故事触动人心

日前,90后作家刘楚昕创作的小说《泥潭》荣获第二届漓江文学奖虚构类奖。在颁奖现场,作家余华公布了这一消息。刘楚昕的获奖感言因其深情和感人,在朋友圈里广泛传播。2017年,刘楚昕在武汉大学读博期间遇到了初恋女友。那时他正朝着自己的文学梦努力,每次散步时都会告诉女友…

金价复涨!国际金价反弹

美东时间5月29日,国际金价反弹,现货黄金涨0.96%,报3317.8美元/盎司;COMEX黄金期货涨0.61%,报3342.6美元/盎司;COMEX白银期货涨0.84%,报33.44美元/盎司。早间金价再度出现下跌,现货黄金现跌0.02%,报3316.6美元/盎司;COMEX黄金期货现跌0.17%,报3338.3美元/盎司。责任编…

53岁男子性侵智力残障女子致其产子 判有期徒刑4年10个月

2023年的夏末秋初,53岁的高如强在李小梅家中,明知她智力存在严重缺陷仍与她发生性关系。2024年6月,北京某医院产房内,23岁的李小梅诞下一名男婴。经司法鉴定,李小梅之子小齐的生物学父亲为高如强。“根据我国刑法第236条,与无性防卫能力者发生性关系,无论是否‘自愿’,…

中东部大范围降雨来袭!端午假期泡雨里 长江中下游雨势强劲

从5月30日开始,中东部地区迎来新一轮大范围降雨过程。端午假期前两天将是此轮降雨的最强时段,长江中下游地区不仅会出现大到暴雨,多地还将显著降温,部分地区最高气温将降至20℃左右。公众需注意防雨防滑,并及时增添衣物。昨天,南方今年来最强降雨过程进入收尾阶段,强降雨…