【JAVA高级篇教学】第三篇:Redisson作用简介

news2025/2/28 5:20:44

Redisson 是一个强大的 Redis 客户端,不仅可以实现限流和分布式锁,还提供了许多其他分布式工具和功能,涵盖数据结构、同步控制、消息队列等多个方面。以下是 Redisson 的主要作用和使用场景:

目录

1. 分布式数据结构

支持的数据结构

2. 分布式同步工具

常用工具

3. 分布式消息队列

消息队列类型

4. 分布式对象缓存

常见分布式缓存对象

5. 任务调度

分布式任务调度

6. 地理位置服务

7. 分布式 ID 生成器

8. Pub/Sub 发布订阅

9. 分布式事务

总结


1. 分布式数据结构

Redisson 提供了对 Redis 常见数据结构的封装,使其可以像本地 Java 数据结构一样使用,同时支持分布式存储。

支持的数据结构

  • Map (RMap)
    分布式哈希表,可以在多个实例间共享键值对。
    RMap<String, String> map = redissonClient.getMap("myMap");
    map.put("key", "value");
    
  • Set (RSet)
    分布式集合,支持唯一性约束。
    RSet<String> set = redissonClient.getSet("mySet");
    set.add("item1");
    
  • List (RList)
    分布式列表,支持顺序操作。
    RList<String> list = redissonClient.getList("myList");
    list.add("element");
    
  • Queue 和 Deque (RQueue, RDeque)
    支持分布式队列和双端队列操作。
    RQueue<String> queue = redissonClient.getQueue("myQueue");
    queue.add("message");
    
  • ScoredSortedSet (RScoredSortedSet)
    分布式有序集合(支持分数排序),适用于排行榜等场景。
    RScoredSortedSet<String> scoredSet = redissonClient.getScoredSortedSet("mySortedSet");
    scoredSet.add(100.0, "player1");
    

2. 分布式同步工具

Redisson 提供了多种同步工具,用于解决分布式环境下的并发问题。

常用工具

  • 分布式锁 (RLock)
    用于控制分布式系统中的资源访问。

    RLock lock = redissonClient.getLock("myLock");
    lock.lock();
    try {
        // critical section
    } finally {
        lock.unlock();
    }
    
  • 可重入锁 (RLock) 支持同一线程的重入锁机制。

  • 读写锁 (RReadWriteLock)
    提供读多写单的分布式锁。

    RReadWriteLock rwLock = redissonClient.getReadWriteLock("myRWLock");
    rwLock.readLock().lock();
    try {
        // read operation
    } finally {
        rwLock.readLock().unlock();
    }
    
  • 信号量 (RSemaphore)
    控制对共享资源的访问线程数量。

    RSemaphore semaphore = redissonClient.getSemaphore("mySemaphore");
    semaphore.acquire();
    try {
        // access resource
    } finally {
        semaphore.release();
    }
    
  • 可数信号量 (RCountDownLatch)
    用于等待多个线程完成任务。

    RCountDownLatch latch = redissonClient.getCountDownLatch("myCountDownLatch");
    latch.trySetCount(3);
    latch.await(); // wait for countdown to reach 0
    

3. 分布式消息队列

Redisson 支持基于 Redis 的分布式消息队列,适合异步任务处理和事件驱动的场景。

消息队列类型

  • 标准队列 (RQueue)
    适用于简单的任务队列。
    RQueue<String> queue = redissonClient.getQueue("taskQueue");
    queue.add("task1");
    String task = queue.poll();
    
  • 阻塞队列 (RBlockingQueue)
    消费者可以阻塞等待队列中的消息。
    RBlockingQueue<String> blockingQueue = redissonClient.getBlockingQueue("myBlockingQueue");
    blockingQueue.put("task");
    String task = blockingQueue.take();
    
  • 延迟队列 (RDelayedQueue)
    支持定时任务的延迟队列。
    RQueue<String> queue = redissonClient.getQueue("mainQueue");
    RDelayedQueue<String> delayedQueue = redissonClient.getDelayedQueue(queue);
    delayedQueue.offer("task", 10, TimeUnit.SECONDS); // delay task for 10 seconds
    

4. 分布式对象缓存

Redisson 支持将 Java 对象直接存储到 Redis 中,方便快速读取和共享。

常见分布式缓存对象

  • 分布式对象桶 (RBucket)
    用于存储单个对象。
    RBucket<String> bucket = redissonClient.getBucket("myBucket");
    bucket.set("Hello, Redis!");
    String value = bucket.get();
    
  • 分布式 Map 缓存 (RMapCache)
    支持过期和淘汰策略的分布式 Map。
    RMapCache<String, String> mapCache = redissonClient.getMapCache("myMapCache");
    mapCache.put("key", "value", 10, TimeUnit.SECONDS); // 10秒后过期
    

5. 任务调度

Redisson 提供了分布式的任务调度工具,适合定时任务和任务分片执行。

分布式任务调度

  • 任务队列 (RScheduledExecutorService)
    支持分布式的定时任务调度。
    RScheduledExecutorService executorService = redissonClient.getExecutorService("myExecutor");
    executorService.schedule(() -> {
        System.out.println("Scheduled task executed");
    }, 10, TimeUnit.SECONDS);
    

6. 地理位置服务

Redisson 提供 RGeo 接口,可以存储和查询地理位置数据(基于 Redis 的 Geo 数据类型)。

RGeo<String> geo = redissonClient.getGeo("geoKey");
geo.add(13.361389, 38.115556, "Palermo");
geo.add(15.087269, 37.502669, "Catania");

Double distance = geo.dist("Palermo", "Catania", GeoUnit.KILOMETERS);

7. 分布式 ID 生成器

Redisson 提供分布式 ID 生成器 RIdGenerator,可以生成唯一的自增 ID。

RIdGenerator idGenerator = redissonClient.getIdGenerator("idGenerator");
idGenerator.tryInit(1, 1); // 初始化起始值和步长
long id = idGenerator.nextId();

8. Pub/Sub 发布订阅

支持 Redis 的发布订阅机制,用于事件驱动场景。

RTopic topic = redissonClient.getTopic("myTopic");
topic.addListener(String.class, (channel, message) -> {
    System.out.println("Received message: " + message);
});

topic.publish("Hello, Pub/Sub!");

9. 分布式事务

Redisson 提供基于 Redis 的分布式事务管理器 RTransaction

RTransaction transaction = redissonClient.createTransaction(TransactionOptions.defaults());
RMap<String, String> map = transaction.getMap("myMap");
map.put("key", "value");
transaction.commit();

总结

除了限流和分布式锁,Redisson 在分布式数据结构、同步工具、消息队列、地理位置服务、任务调度等方面功能丰富,适合构建高性能分布式系统。

Redisson 的这些特性极大地降低了分布式系统开发的复杂度,使开发者可以专注于业务逻辑而非底层实现。

点个关注,不会迷路! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2257882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot413福泰轴承股份有限公司进销存系统(论文+源码)_kaic

摘 要 使用旧方法对福泰轴承股份有限公司进销存系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在福泰轴承股份有限公司进销存系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不…

Linux部署oceanbase

一、源码部署 1. 下载官网安装包 https://www.oceanbase.com/softwarecenter 2. 上传安装包并解压缩 #在/home目录下创建oceanbase文件夹 mkdir oceanbase cd oceanbase/ tar -xzf oceanbase-all-in-one-4.2.1_bp10_20241122.el7.x86_64.tar.gz 3. 安装 cd oceanbase-all-in…

分布式 分布式事务 总结

前言 相关系列 《分布式 & 目录》《分布式 & 分布式事务 & 总结》《分布式 & 分布式事务 & 问题》 分布式事务 所谓分布式事务是指操作范围笼罩多个不同节点的事务。例如对于订单节点&库存节点而言&#xff0c;一次完整的交易需要同时调动两个节…

【蓝桥杯每日一题】重新排序

重新排序 2024-12-8 蓝桥杯每日一题 重新排序 前缀和 差分 题目大意 给定一个数组 A 和一些查询 L i , R i Li_,R_i Li,​Ri​, 求数组中第 L i L_i Li​至第 R i R_i Ri​个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查 询结果的和尽可能…

jupyterlab 增加多个kernel,正确做法

1、背景 需要增加一个kernel然后相当于隔离一个环境 juypterlab Version 3.0.14 2、用conda 安装 例如&#xff0c;你在conda下有一个python 3.12 的环境 py312 ipython kernel install --user --namepy312 如果保持的话&#xff0c;用pip安装相应的包就好 3、检查是否配置好 …

uni-app 组成和跨端原理 【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

KV Shifting Attention Enhances Language Modeling

基本信息 &#x1f4dd; 原文链接: https://arxiv.org/abs/2411.19574&#x1f465; 作者: Mingyu Xu, Wei Cheng, Bingning Wang, Weipeng Chen&#x1f3f7;️ 关键词: KV shifting attention, induction heads, language modeling&#x1f4da; 分类: 机器学习, 自然语言处…

算法-字符串-72.编辑距离

一、题目 二、思路解析 1.思路&#xff1a; 最少操作数——动态数组 res[i][j]:长度为i的字符串转化为长度为j字符串的最少操作 2.常用方法&#xff1a; 无 3.核心逻辑&#xff1a; 1.情况一&#xff1a;当word1为空&#xff0c;word2不为空时 for(int i0;i<size2;i){res[0…

云开发实战教程:手把手教你高效开发应用

声明&#xff1a;本文仅供实践教学使用&#xff0c;没有任何打广告成分 目录 1.引言 2.云开发 Copilot介绍 云开发 Copilot 的功能与特点 3.环境准备 步骤一登录账号 步骤二新建环境 4.开发实践 4.1AI 生成低代码应用 4.2AI 生成低代码页面/区块 4.3AI 优化低代码组件…

Linux笔记9 DNS域名解析服务器

简介 DNS&#xff08;Domain Name System&#xff09;是互联网上的一项服务&#xff0c;它作为将域名和IP地址相互映射的一个分 布式数据库&#xff0c;能够使人更方便的访问互联网。 DNS使用的是53端口&#xff0c; 通常DNS是以UDP这个较快速的数据传输协议来查询的&#x…

编程的“超能力”:解锁 MarsCode AI 的智能助手

文章目录 前言MarsCode AI 提供的超能力**1. 代码补全 | Code Completion**你是否曾卡在函数的中途&#xff0c;不知道下一行该怎么写&#xff1f;MarsCode AI 就是你的灵感缪斯&#xff01;示例 **2. 代码解释 | Explain Code**“这段代码是干嘛的&#xff1f;”当你面对团队老…

大数据新视界 -- 大数据大厂之 Hive 数据导入:多源数据集成的策略与实战(上)(3/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

提升搜索体验!—— 推出 Elastic Rerank 模型(技术预览版)

作者&#xff1a;来自 Elastic Shubha Anjur Tupil 几分钟内即可开始使用 Elastic Rerank 模型&#xff1a;强大的语义搜索功能&#xff0c;无需重新索引&#xff0c;提供灵活性和成本控制&#xff1b;高相关性、顶级性能和文本搜索效率。 使用我们全新的先进跨编码器 Elastic …

STM32+模拟或硬件IIC+SHT20驱动问题:接上拉电阻、BUSY死锁?

主要问题&#xff1a; 1&#xff0c;使用STM32F103C8T6&#xff0c;模拟IIC&#xff0c;SCL和SDA口配置为推挽输出上拉&#xff0c;主要是SDA脚&#xff0c;每次都要输出输入模式重新配置&#xff0c;虽然也能通信&#xff0c;但不稳定&#xff0c;出错率大&#xff1b; 2&…

Windows11和Ubuntu用PointNet++训练自己的数据集(部件分割模型)

省流&#xff1a; &#xff08;1&#xff09;不管是Linux还是Windows都不影响&#xff0c;只要有pycharm或者vscode即可&#xff0c;啥系统都行。 &#xff08;2&#xff09;此外由于自己的需求&#xff0c;所以只做物体部件分割&#xff08;partseg&#xff09;任务&#xff0…

【git】git回退到之前版本+拓展git命令

一、问题 git提交有时候会出错&#xff0c;想回退到之前的版本 1、命令git reset --soft <commit_id> commit_id【回退到的编号】 2、git push --force-with-lease origin <branch_name> branch_name【分支名】 二、拓展 1、git bash 1、进入任意磁盘 cd 磁盘…

Golang使用etcd构建分布式锁案例

在本教程中&#xff0c;我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性&#xff0c;防止竞争条件&#xff0c;并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…

开源数据同步中间件(Dbsyncer)简单玩一下 mysql to mysql 的增量,全量配置

一、什么是Dbsyncer 1、介绍 Dbsyncer是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景&#xff0c;支持上传插件自定义同步转换业务&#xff0c;提供监控全量和增量数据统计图、应用性能预警…

element-plus的el-tree的双向绑定

el-tree改造了下 可选可取消 有默认值 不包含父级id&#xff08;也可打开注释 包含父级id&#xff09; 默认展开 点击节点也可触发选择 节点内容自定义 <template><div class"absolute"><el-scrollbar class"pall"><div class"…

微信小程序报错:http://159.75.169.224:7300不在以下 request 合法域名列表中,请参考文档

要解决此问题&#xff0c;需打开微信小程序开发者工具进行设置&#xff0c;打开详情-本地设置重新运行&#xff0c;该报错就没有啦