【实践篇】Redis最强Java客户端Redisson
文章目录
- 1. 前言
- 2. Redisson基础概念
- 2.1 数据结构和并发工具
- 2.1.1 对Redis原生数据类型的封装和使用
- 2.1.2 分布式锁实现和应用
- 2.1.3 分布式集合使用方法
- 2.2 Redisson的高级特性
- 2.2.1 分布式对象实现和使用
- 2.2.2 分布式消息队列实现和使用
- 2.2.3 分布式计数器实现和使用
- 3. 参考资料
- 4. 源码地址
- 5. Redis从入门到精通系列文章

1. 前言
在我们的上一篇文章中,我们介绍了 Redisson 的相关概念 历史背景,发展现状。现在我们已经准备好进一步深入了解 Redisson基础概念,并了解它如何以及在哪些场景中提供出色、可靠的性能。在本篇文章中, 我们将 进一步理解和使用 Redisson,这是一种为 Java 提供的高级 Redis 客户端。
上一章内容 《【实践篇】Redis最强Java客户端(一)之Redisson入门介绍》
2. Redisson基础概念
2.1 数据结构和并发工具
2.1.1 对Redis原生数据类型的封装和使用
Redisson对Redis基本数据类型进行了封装,为Java开发者提供了丰富的数据结构和并发工具。例如:
- RBucket:封装了Redis的string字符串;
- RMap:封装了Redis的HashTable,也即Redis的hash命令;
- RList:封装了Redis的List,实现了List接口;
- RSet:封装了Redis的Set,实现了Set接口;
- RSortedSet:封装了Redis的Zset接口;
- RQueue:封装了Redis的list命令,实现了Queue接口;
- RDeque:封装了Redis的list命令,实现了Deque接口;
- RAtomicLong:封装了Redis的string(字符串),实现了原子性的long。
-
RBucket: RBucket 用于对单一值进行缓存,代替 Java 中的 AtomicReference。在分布式环境中,提供了对单一值的持久化存储和原子操作。例如:
RBucket<String> bucket = redisson.getBucket("bucket"); bucket.set("redisson"); String value = bucket.get();
-
RMap: RMap 用于存储需要多个键值对,代替 Java 中的 HashMap。在分布式环境中,提供了 Map 实现,支持事务和原子操作。例如:
RMap<String, Integer> map = redisson.getMap("map"); map.put("a", 1); map.put("b", 2); Integer bValue = map.get("b");
-
RList: RList 用于有序存储多个元素,并可能存储重复元素,代替 Java 中的 ArrayList。实现了分布式环境下的可变数组,支持正向和反向遍历。例如:
RList<Integer> list = redisson.getList("list"); list.add(1); list.add(2); list.add(3); Integer secondElement = list.get(1);
-
RSet: RSet 用于存储无序且不重复的多个元素,代替 Java 中的 HashSet。在分布式环境中,提供了无序集合的实现,支持常见的集合操作。例如:
RSet<Integer> set = redisson.getSet("set"); set.add(1); set.add(2); set.add(3); boolean containsTwo = set.contains(2);
-
RSortedSet: RSortedSet 用于有序存储元素,并能根据元素的自然顺序或自定义比较器进行排序,代替 Java 中的 TreeSet。在分布式环境下,实现了有序集合,支持快速地获取有序集中的最大或最小元素。例如:
RSortedSet<Integer> sortedSet = redisson.getSortedSet("sortedSet"); sortedSet.add(3); sortedSet.add(1); sortedSet.add(2); Integer firstElement = sortedSet.first();
-
RQueue: RQueue 用于多个元素按一定顺序进行存储,并按该顺序进行检索,代替 Java 中的 Queue。在分布式环境中,提供了队列实现,尤其有利于实现生产者-消费者模型。例如:
RQueue<Integer> queue = redisson.getQueue("queue"); queue.add(1); Integer item = queue.poll();
-
RDeque: RDeque 用于需要从两端插入或删除元素的数据结构,代替 Java 中的 LinkedList。在分布式环境中,提供了双端队列实现,支持从头部或尾部插入和删除元素。例如:
RDeque<Integer> deque = redisson.getDeque("deque"); deque.addFirst(1); deque.addLast(2); Integer firstElement = deque.getFirst(); Integer lastElement = deque.getLast();
-
RAtomicLong: RAtomicLong 用于对单一值进行原子操作,如自增、自减等,代替 Java 中的 AtomicLong。在分布式环境下,进行原子增减操作,避免并发问题。例如:
RAtomicLong atomicLong = redisson.getAtomicLong("atomicLong"); atomicLong.set(1); atomicLong.incrementAndGet(); long atomicLongValue = atomicLong.get();
2.1.2 分布式锁实现和应用
Redisson支持多种分布式锁和同步器,如:RLock,RSemaphore,RCountDownLatch,RReadWriteLock等。这些锁具有超时自动解锁、阻塞等待锁和公平锁等特性。
例如,使用RLock实现分布式锁:
RLock lock = redisson.getLock("anyLock");
lock.lock();
try {// 执行业务代码
} finally {lock.unlock();
}
2.1.3 分布式集合使用方法
Redisson提供了分布式的List、Set、SortedSet、Map和Queue,适用于各种场景。例如,使用RList实现分布式列表:
RList<String> list = redisson.getList("anyList");
list.add("1");
list.add("2");
2.2 Redisson的高级特性
2.2.1 分布式对象实现和使用
Redisson提供了一些分布式对象,如RBloomFilter(布隆过滤器),RHyperLogLog,RLexSortedSet等。例如,使用RBloomFilter实现分布式布隆过滤器:
RBloomFilter<String> bloomFilter = redisson.getBloomFilter("sampleFilter");
bloomFilter.tryInit(10000L, 0.03);
bloomFilter.add("item");
2.2.2 分布式消息队列实现和使用
Redisson支持RQueue、RBlockingQueue、RDelayedQueue等分布式队列和阻塞队列。例如,使用RQueue实现分布式消息队列:
RQueue<String> queue = redisson.getQueue("anyQueue");
queue.offer("item");
String item = queue.poll();
2.2.3 分布式计数器实现和使用
Redisson提供了一些分布式计数器,如RAtomicLong、RAtomicDouble、RCountDownLatch等。例如,使用RAtomicLong实现分布式原子长整数:
RAtomicLong atomicLong = redisson.getAtomicLong("anyLong");
atomicLong.set(3);
atomicLong.incrementAndGet();
3. 参考资料
-
Redisson官方网站:https://redisson.org/
-
Redisson GitHub仓库:https://github.com/redisson/redisson
-
redisson 参考文档 https://redisson.org/documentation.html
4. 源码地址
https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023
5. Redis从入门到精通系列文章
- 《【Redis实践篇】使用Redisson 优雅实现项目实践过程中的5种场景》
- 《Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性》
- 《SpringBoot Redis 使用Lettuce和Jedis配置哨兵模式》
- 《Redis【应用篇】之RedisTemplate基本操作》
- 《Redis 从入门到精通【实践篇】之SpringBoot配置Redis多数据源》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis HyperLogLog 数据结构》
- 《Redis 从入门到精通【进阶篇】之三分钟了解Redis地理位置数据结构GeoHash》
- 《Redis 从入门到精通【进阶篇】之高可用哨兵机制(Redis Sentinel)详解》
- 《Redis 从入门到精通【进阶篇】之redis主从复制详解》
- 《Redis 从入门到精通【进阶篇】之Redis事务详解》
- 《Redis从入门到精通【进阶篇】之对象机制详解》
- 《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
- 《Redis从入门到精通【进阶篇】之持久化 AOF详解》
- 《Redis从入门到精通【进阶篇】之持久化RDB详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
- 《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
- 《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
大家好,我是冰点,今天的【实践篇】Redis最强Java客户端(二)之Redisson基础概念,全部内容就是这些。如果你有疑问或见解可以在评论区留言。
相关文章:

【实践篇】Redis最强Java客户端Redisson
文章目录 1. 前言2. Redisson基础概念2.1 数据结构和并发工具2.1.1 对Redis原生数据类型的封装和使用2.1.2 分布式锁实现和应用2.1.3 分布式集合使用方法 2.2 Redisson的高级特性2.2.1 分布式对象实现和使用2.2.2 分布式消息队列实现和使用2.2.3 分布式计数器实现和使用 3. 参考…...

esxi扩容磁盘
esxi扩容磁盘 fdisk -l没用扩容 登录Esxi管理界面扩容磁盘 进入服务器查看 没用变化 (有些可能进去磁盘就是更新,直接就是扩容的,但是没扩容就需要执行下面的命令) [root234-ces /]# fdisk -l Disk /dev/sda: 85.9 GB, 858993…...

核心实验21_BGP高级(了解)(配置略)_ENSP
项目场景: 核心实验21_BGP基础_ENSP 通过bgp实现省市互通。 实搭拓扑图: 具体操作: 其他基础配置略(接口地址,ospf) 1.BGP邻居建立: R1: [R1]bgp 200 [R1-bgp]peer 10.2.2.2 as-number 200 …...
宝塔安装python和openssl
宝塔安装python和openssl OpenSSL Centos7 openssl 升级 1.1.1k.tar.gz centos7系统安装Vicuna(小羊驼)聊天机器人 CentOS中输入yum报错:sudo: unable to execute /bin/yum: No such file or directory opensslrpm安装指南-让你的网站更加…...
TDengine 3.1.1.0 来啦!更新如下
自 3.0 版本发布以来,在研发人员和社区用户的不断努力下,TDengine 做了大量更新,产品稳定性和易用性也在不断提升。近日,TDengine 3.1.1.0 成功发布,本文将向大家简单介绍一下该版本涉及的重大更新。 写在前面 伴随 …...

YSA Toon (Anime/Toon Shader)
这是一个Toon着色器/Cel阴影着色器,用于Unity URP 此着色器的目的是使角色或物体阴影实时看起来尽可能接近真实的动画或卡通效果 可以用于游戏,渲染,插图等 着色器特性,如:面的法线平滑、轮廓修复、先进的边缘照明、镜面照明、完全平滑控制 这个文档包括所有的功能https:/…...

LabVIEW通过IEC61508标准验证ITER联锁系统
LabVIEW通过IEC61508标准验证ITER联锁系统 保护环境要求系统能够保护机器免受工厂系统故障或机器危险操作造成的严重损坏。负责此功能的ITER系统是联锁控制系统(ICS)。该系统通过中央联锁系统(CIS)监督和控制不同的工厂联锁系统&…...
如何处理日期和时间?
处理日期和时间是计算机编程中的常见任务,无论是在C语言还是其他编程语言中。C语言提供了一些库函数来处理日期和时间,主要是通过<time.h>头文件中的函数来完成的。在本文中,我将详细解释如何在C语言中处理日期和时间,包括日…...

【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化
视频推拉流EasyDSS视频直播点播平台,集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体,可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 TSINGSEE青犀视频的EasyDSS平台具有点播文件分类展示方法…...

论文多级编号-word2010
多级列表-定义新的多级列表 注意1.1中的两个1必须是灰色(如果不是灰色,解决方法放在文本文末了) 如果定义过程中发现1.1中的1不是灰色,如下图,那么需要操作下述步骤 点击文件-选项 取消勾选自动编号列表。确定后关闭文…...

Jetpack Compose基础组件之 — Text
Text的源码参数预览 Composable fun Text(text: String,modifier: Modifier Modifier,color: Color Color.Unspecified,fontSize: TextUnit TextUnit.Unspecified,fontStyle: FontStyle? null,fontWeight: FontWeight? null,fontFamily: FontFamily? null,letterSpac…...

动手学深度学习——Windows下的环境安装流程(一步一步安装,图文并配)
目录 环境安装官网步骤图文版安装Miniconda下载包含本书全部代码的压缩包使用conda创建虚拟(运行)环境使用conda创建虚拟环境并安装本书需要的软件激活之前创建的环境打开Jupyter记事本 环境安装 文章参考来源:http://t.csdn.cn/tu8V8 官网…...

打印日志遇到的问题,logback与zookeeper冲突
在做项目时需要打印日志引入了logback打印日志,但是一直无法打印,于是一路查找原因。发现zookeeper中默认带的有个logback和我自己引入的logback版本冲突了,这样直接使用exclusions标签将zookeeper中自带的日志框架全部排除即可 按理说到这一…...
【Node.js操作SQLite指南】
Node.js操作SQLite指南 在本篇博客中,我们将学习如何在Node.js中操作SQLite数据库。我们将使用sqlite3模块来创建数据库、创建表以及进行数据的增删改查操作。 文章目录 Node.js操作SQLite指南安装sqlite3模块创建数据库创建表数据的增删改查插入数据查询数据更新…...

PyTorch之张量的相关操作大全 ->(个人学习记录笔记)
文章目录 Torch1. 张量的创建1.1 直接创建1.1.1 torch.tensor1.1.2 torch.from_numpy(ndarray) 1.2 依据数值创建1.2.1 torch.zeros1.2.2 torch.zeros_like1.2.3 torch.ones1.2.4 torch.ones_like1.2.5 torch.full1.2.6 torch.full_like1.2.7 torch.arange1.2.8 torch.linspace…...

ChatGPT生成内容很难脱离标准化,不建议用来写留学文书
ChatGPT无疑是23年留学届的热门话题,也成为了不少留学生再也离不开的万能工具,从总结文献、润色论文、给教授写email似乎无所不能。 各大高校对于学生使用ChatGPT的态度也有所不同。例如,哈佛大学教育代理院长 Anne Harrington 在内部邮件中…...
sqlserver @@ROWCOUNT的使用
T-SQL是一种用于与关系型数据库(如Microsoft SQL Server)交互的SQL(Structured Query Language)方言。 在T-SQL中,ROWCOUNT是一个系统变量,它返回最后执行的语句影响的行数。你提供的代码检查ROWCOUNT的值…...
Hbase批量删除数据
一、TTL机制 HBase的TTL(Time To Live)是一种用于指定数据存活时间的机制。它允许用户为HBase中的数据设置一个固定的生存时间,在达到指定的时间后,HBase会自动删除这些数据。 具体操作如下: 三步走,先禁用…...

飞行动力学 - 第20节-part2-机翼上反及后掠对横向静稳定性的影响 之 基础点摘要
飞行动力学 - 第20节-part2-机翼上反及后掠对横向静稳定性的影响 之 基础点摘要 1. 上反角贡献2. 后掠角贡献3. 参考资料 1. 上反角贡献 对于无后掠、大展弦比带上反的矩形机翼,飞行状态为 α \alpha α, β \beta β及V。 上反角增加稳定性,…...

力扣 -- 1218. 最长定差子序列
参考代码: class Solution { public:int longestSubsequence(vector<int>& arr, int difference) {int narr.size();unordered_map<int,int> hash;//nums[i]绑定dp[i]hash[arr[0]]1;int ret1;for(int i1;i<n;i){int aarr[i];int ba-difference;…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...

基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...