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

【实践篇】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。
  1. RBucket: RBucket 用于对单一值进行缓存,代替 Java 中的 AtomicReference。在分布式环境中,提供了对单一值的持久化存储和原子操作。例如:

    RBucket<String> bucket = redisson.getBucket("bucket");
    bucket.set("redisson");
    String value = bucket.get();
    
  2. 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");
    
  3. RList: RList 用于有序存储多个元素,并可能存储重复元素,代替 Java 中的 ArrayList。实现了分布式环境下的可变数组,支持正向和反向遍历。例如:

    RList<Integer> list = redisson.getList("list");
    list.add(1);
    list.add(2);
    list.add(3);
    Integer secondElement = list.get(1);
    
  4. RSet: RSet 用于存储无序且不重复的多个元素,代替 Java 中的 HashSet。在分布式环境中,提供了无序集合的实现,支持常见的集合操作。例如:

    RSet<Integer> set = redisson.getSet("set");
    set.add(1);
    set.add(2);
    set.add(3);
    boolean containsTwo = set.contains(2);
    
  5. RSortedSet: RSortedSet 用于有序存储元素,并能根据元素的自然顺序或自定义比较器进行排序,代替 Java 中的 TreeSet。在分布式环境下,实现了有序集合,支持快速地获取有序集中的最大或最小元素。例如:

    RSortedSet<Integer> sortedSet = redisson.getSortedSet("sortedSet");
    sortedSet.add(3);
    sortedSet.add(1);
    sortedSet.add(2);
    Integer firstElement = sortedSet.first();
    
  6. RQueue: RQueue 用于多个元素按一定顺序进行存储,并按该顺序进行检索,代替 Java 中的 Queue。在分布式环境中,提供了队列实现,尤其有利于实现生产者-消费者模型。例如:

    RQueue<Integer> queue = redisson.getQueue("queue");
    queue.add(1);
    Integer item = queue.poll();
    
  7. RDeque: RDeque 用于需要从两端插入或删除元素的数据结构,代替 Java 中的 LinkedList。在分布式环境中,提供了双端队列实现,支持从头部或尾部插入和删除元素。例如:

    RDeque<Integer> deque = redisson.getDeque("deque");
    deque.addFirst(1);
    deque.addLast(2);
    Integer firstElement = deque.getFirst();
    Integer lastElement = deque.getLast();
    
  8. 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. 参考资料

  1. Redisson官方网站:https://redisson.org/

  2. Redisson GitHub仓库:https://github.com/redisson/redisson

  3. 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管理界面扩容磁盘 进入服务器查看 没用变化 &#xff08;有些可能进去磁盘就是更新&#xff0c;直接就是扩容的&#xff0c;但是没扩容就需要执行下面的命令&#xff09; [root234-ces /]# fdisk -l Disk /dev/sda: 85.9 GB, 858993…...

核心实验21_BGP高级(了解)(配置略)_ENSP

项目场景&#xff1a; 核心实验21_BGP基础_ENSP 通过bgp实现省市互通。 实搭拓扑图&#xff1a; 具体操作&#xff1a; 其他基础配置略&#xff08;接口地址&#xff0c;ospf&#xff09; 1.BGP邻居建立&#xff1a; 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&#xff08;小羊驼&#xff09;聊天机器人 CentOS中输入yum报错&#xff1a;sudo: unable to execute /bin/yum: No such file or directory opensslrpm安装指南-让你的网站更加…...

TDengine 3.1.1.0 来啦!更新如下

自 3.0 版本发布以来&#xff0c;在研发人员和社区用户的不断努力下&#xff0c;TDengine 做了大量更新&#xff0c;产品稳定性和易用性也在不断提升。近日&#xff0c;TDengine 3.1.1.0 成功发布&#xff0c;本文将向大家简单介绍一下该版本涉及的重大更新。 写在前面 伴随 …...

YSA Toon (Anime/Toon Shader)

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

LabVIEW通过IEC61508标准验证ITER联锁系统

LabVIEW通过IEC61508标准验证ITER联锁系统 保护环境要求系统能够保护机器免受工厂系统故障或机器危险操作造成的严重损坏。负责此功能的ITER系统是联锁控制系统&#xff08;ICS&#xff09;。该系统通过中央联锁系统&#xff08;CIS&#xff09;监督和控制不同的工厂联锁系统&…...

如何处理日期和时间?

处理日期和时间是计算机编程中的常见任务&#xff0c;无论是在C语言还是其他编程语言中。C语言提供了一些库函数来处理日期和时间&#xff0c;主要是通过<time.h>头文件中的函数来完成的。在本文中&#xff0c;我将详细解释如何在C语言中处理日期和时间&#xff0c;包括日…...

【开发】视频集中存储/直播点播平台EasyDSS点播文件分类功能优化

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

论文多级编号-word2010

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

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创建虚拟&#xff08;运行&#xff09;环境使用conda创建虚拟环境并安装本书需要的软件激活之前创建的环境打开Jupyter记事本 环境安装 文章参考来源&#xff1a;http://t.csdn.cn/tu8V8 官网…...

打印日志遇到的问题,logback与zookeeper冲突

在做项目时需要打印日志引入了logback打印日志&#xff0c;但是一直无法打印&#xff0c;于是一路查找原因。发现zookeeper中默认带的有个logback和我自己引入的logback版本冲突了&#xff0c;这样直接使用exclusions标签将zookeeper中自带的日志框架全部排除即可 按理说到这一…...

【Node.js操作SQLite指南】

Node.js操作SQLite指南 在本篇博客中&#xff0c;我们将学习如何在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年留学届的热门话题&#xff0c;也成为了不少留学生再也离不开的万能工具&#xff0c;从总结文献、润色论文、给教授写email似乎无所不能。 各大高校对于学生使用ChatGPT的态度也有所不同。例如&#xff0c;哈佛大学教育代理院长 Anne Harrington 在内部邮件中…...

sqlserver @@ROWCOUNT的使用

T-SQL是一种用于与关系型数据库&#xff08;如Microsoft SQL Server&#xff09;交互的SQL&#xff08;Structured Query Language&#xff09;方言。 在T-SQL中&#xff0c;ROWCOUNT是一个系统变量&#xff0c;它返回最后执行的语句影响的行数。你提供的代码检查ROWCOUNT的值…...

Hbase批量删除数据

一、TTL机制 HBase的TTL&#xff08;Time To Live&#xff09;是一种用于指定数据存活时间的机制。它允许用户为HBase中的数据设置一个固定的生存时间&#xff0c;在达到指定的时间后&#xff0c;HBase会自动删除这些数据。 具体操作如下&#xff1a; 三步走&#xff0c;先禁用…...

飞行动力学 - 第20节-part2-机翼上反及后掠对横向静稳定性的影响 之 基础点摘要

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

力扣 -- 1218. 最长定差子序列

参考代码&#xff1a; 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;…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 抽象 现代智能交通系统 &#xff08;ITS&#xff09; 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 &#xff08;…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...