【征服redis5】redis的Redisson客户端

目录

1 Redisson介绍

2. 与其他Java Redis客户端的比较

3.基本的配置与连接池

3.1 依赖和SDK

3.2 配置内容解析

4 实战案例:优雅的让Hash的某个Field过期

5 Redisson的强大功能


1 Redisson介绍

Redisson 最初由 GitHub 用户 “mrniko” 创建,并在 Apache 2.0 许可证下发布。它的目标是提供一组强大的工具和 API,帮助开发人员在分布式环境中处理数据,并解决并发和一致性的问题。

Redisson 是一款在 Redis 的基础上实现的 Java 驻内存数据网格(In-Memory Data Grid)。它提供了很多分布式的java对象并直接映射到Redis服务器的数据结构。


Redisson 提供了一系列丰富的 Redis 对象供用户使用,比如:Bucket, Deque, Set, SortedSet, Map, Lock, AtomicLong, CountDownLatch,Publish / Subscribe,Bloom filter, HyperLogLog 等等。它能使开发者可以直接在代码中操纵这些对象,而不是维护细节,提高了开发的效率。
Redisson 具有以下优势和特点:

  1. 简单易用:Redisson 提供了简单、一致的 API,使得开发人员可以像使用本地对象一样使用分布式对象。
  2. 高性能:Redisson 使用了异步和无锁的设计,以最大程度地提高性能和吞吐量。
  3. 分布式数据结构:Redisson 提供了一系列分布式数据结构,如分布式集合、分布式映射、分布式列表等,使得处理大规模数据变得更加高效。
  4. 分布式锁:Redisson 提供了可重入的分布式锁,帮助开发人员解决并发访问的问题。
  5. 分布式队列:Redisson 提供了分布式队列,支持先进先出和优先级队列,适用于任务调度和消息传递等场景。
  6. 高可用和故障恢复:Redisson 支持主从复制和哨兵模式,确保系统的高可用性和故障恢复能力。


2. 与其他Java Redis客户端的比较

和Jedis以及Lettuce等其他Redis Java客户端比较,Redisson提供了更丰富的分布式对象模型,以及更强大的并发处理和故障恢复特性。
Redisson的高级特性,包括高级Java对象、故障转移、母子复制支持、公平锁支持和分布式服务等,使它成为Java环境中最强大、最灵活的Redis客户端之一。
Redisson与其他Java Redis客户端(Jedis和Lettuce)的比较,足以看出来他的天下无敌。

项目RedissonJedisLettuce
Redis数据类型支持支持全部(包括流)支持全部支持全部
高级Java对象多班并发和分布式Java对象没有没有
连接池
集群支持
故障转移没有
母子复制支持没有
SSL支持
LUA scripting有(只读)有(只读)
响应式API没有
事务支持
分布式锁有(包括公平锁)没有没有
公平锁支持没有没有
发布和订阅
异步API没有
分布式服务有(例如BloomFilter,BitSet,AtomicLong等)没有没有

3.基本的配置与连接池

3.1 依赖和SDK

通过在Maven或Gradle中添加以下依赖来使用Redisson

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

3.2 配置内容解析

Redisson的配置功能就就比较强大了,我们通过下面的文件看一个配置示例:

# Redisson 配置文件

# Redisson 服务器地址
# 可以是单个服务器或多个服务器
# 多个服务器之间使用逗号分隔
redisson.address = "redis://127.0.0.1:6379,redis://127.0.0.2:6379"

# Redisson 连接超时时间(毫秒)
redisson.connectionTimeout = 3000

# Redisson 密码
redisson.password = "password"

# Redisson 连接池配置

# 最小空闲连接数
redisson.connectionPool.minIdle = 10

# 最大连接数
redisson.connectionPool.maxSize = 100

# 连接空闲超时时间(毫秒)
redisson.connectionPool.idleTimeout = 10000

# 连接最大空闲时间(毫秒)
redisson.connectionPool.maxIdleTime = 60000

# Redisson 重试配置

# 重试次数
redisson.retryAttempts = 3

# 重试间隔时间(毫秒)
redisson.retryInterval = 1000

# Redisson 序列化配置
# 可以选择不同的序列化方式,如 JSON、Jackson、Kryo 等
redisson.codec = org.redisson.codec.JsonJacksonCodec

# Redisson 事件监听器配置

# 是否启用事件监听器
redisson.listener.enable = true

# 事件监听器线程池大小
redisson.listener.threadPoolSize = 10

# Redisson 集群配置

# 是否启用集群模式
redisson.cluster.enabled = false

# 集群节点地址
redisson.cluster.nodes = "redis://127.0.0.1:6379,redis://127.0.0.2:6379"

# 集群扫描间隔时间(毫秒)
redisson.cluster.scanInterval = 2000

通过在配置中设置 connectionMinimumIdleSize 和 connectionPoolSize 参数,可以进行Redisson的连接池配置。

  1. connectionMinimumIdleSize:最小空闲连接数,表示即使没有数据库连接时依然维持的空闲连接数量。默认值:32
  2. connectionPoolSize:最大连接池数量,对所有ROUTER节点来说,都是公用的。默认值:64

注意配置中的其它参数也会影响Redisson的性能和行为,比如timeout, retryAttempts, retryInterval等等。应根据实际应用需要来调整这些参数。
当然,我们可以为每个配置项添加注释,以方便理解每个参数的作用。下面是带注释的YAML配置文件:

singleServerConfig:
  idleConnectionTimeout: 10000 # 空闲连接超时,单位:毫秒
  connectTimeout: 10000 # 连接超时,单位:毫秒
  timeout: 3000 # 命令等待超时,单位:毫秒
  retryAttempts: 3 # 命令失败重试次数
  retryInterval: 1500 # 命令重试发送间隔,单位:毫秒
  password: null # Redis 服务器密码
  subscriptionsPerConnection: 5 # 每个连接的最大订阅数量
  clientName: null # Redis 客户端名称
  address: "redis://127.0.0.1:6379" # Redis 服务器地址
  subscriptionConnectionMinimumIdleSize: 1 # 订阅连接的最小空闲数量
  subscriptionConnectionPoolSize: 50 # 订阅连接的最大连接数量
  connectionMinimumIdleSize: 10 # 正常连接的最小空闲数量,至少保持10个空闲连接
  connectionPoolSize: 50 # 正常连接的最大连接数量,最多可以创建50个连接
  database: 0 # 连接的数据库编号,默认是0
  dnsMonitoringInterval: 5000 # DNS监控间隔,单位:毫秒

4 实战案例:优雅的让Hash的某个Field过期

为了感受 redisson 的强大,我们写一个redis其他客户端不具备的能力。
使用redisson 设置 hash结构的二级key过期。也就是设置hash 结构的 field 设置过期时间。我们使用redisson优雅的使Hash的某个Field过期。

 redisson.yaml 示例:

singleServerConfig:
  idleConnectionTimeout: 10000
  connectTimeout: 10000
  timeout: 3000
  retryAttempts: 3
  retryInterval: 1500
  password: null
  subscriptionsPerConnection: 5
  clientName: null
  address: "redis://127.0.0.1:6379"
  subscriptionConnectionMinimumIdleSize: 1
  subscriptionConnectionPoolSize: 50
  connectionMinimumIdleSize: 10
  connectionPoolSize: 50
  database: 0
  dnsMonitoringInterval: 5000

测试:

package com.icepip,redisson.example;

import org.redisson.Redisson;
import org.redisson.api.RBucket;
import org.redisson.api.RMap;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;

import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) {
        Config config = Config.fromYAML(Main.class.getClassLoader().getResource("redisson.yaml"));
        RedissonClient redisson = Redisson.create(config);

        // 设置Hash的key和value
        RMap<String, String> map = redisson.getMap("hash");
        map.put("field", "value");

        // 对于相应的key设置过期时间
        RBucket<String> bucket = redisson.getBucket("hash:field:expire");
        bucket.set("dummyValue", 5, TimeUnit.MINUTES);
 
    }
}

5 Redisson的强大功能

在网上能看到这么一张图,这些都是使用redisson+redis可以实现的功能, 由此可见其功能只强大。

这部分内容可以参考:

redission分布式锁的实战案例

redisson使用全解——redisson官方文档+注释


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FreeRTOS学习第7篇--周期性延迟和相对性延迟函数

目录 FreeRTOS学习第7篇--周期性延迟和相对性延迟函数时间延迟vTaskDelay函数原型vTaskDelayUntil函数原型PrintTask_Task任务相关代码片段实验现象本文中使用的测试工程 FreeRTOS学习第7篇–周期性延迟和相对性延迟函数 本文目标&#xff1a;学习与使用FreeRTOS中的延迟函数&…

wox 启动的cmd无法识别npm

安装软件步骤&#xff1a;everything->wox->nvm->npm->yarn 新打开的任意cmd窗口均发现可以识别npm和yarn命令&#xff0c;但是wox启动的cmd窗口就不行 联想到cmd的特性是一个cmd窗口打开后&#xff0c;其运行环境就会固定&#xff0c;不会随着你系统环境变量的更…

常见的系统性能指标:QPS、TPS

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项目…

python/c++ Leetcode题解——118. 杨辉三角

方法一:数学 思路及解法 杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。 杨辉三角具有以下性质: 1.每行数字左右对称,由…

二进制的详细理解

二进制 什么是2进制 逢2进1的计数规则 2进制 规则&#xff1a;逢2进1 数字&#xff1a;0 1 权&#xff1a;128 64 32 16 8 4 2 1 基数&#xff1a;2 10进制计数规则 10进制 规则&#xff1a;逢10进1 数字&#xff1a;0 1 2 3 4 5 6 7 8 9 权&#xff1a;万 …

【图形学】探秘图形学奥秘:图形变换的解密与实战

​&#x1f308;个人主页&#xff1a;Sarapines Programmer&#x1f525; 系列专栏&#xff1a;《图形学 | 图像解码》⏰诗赋清音&#xff1a;云生高巅梦远游&#xff0c; 星光点缀碧海愁。 山川深邃情难晤&#xff0c; 剑气凌云志自修。 ​ 目录 &#x1f30c;1. 初识模式识别…

khbc靶场小记(upload 666靶场)

尝试上传正常的png jpg gif php的格式的文件发现老是提示烦人的消息&#xff08;上传不成功&#xff09;&#xff1b; 通过抓包对MIME进行爆破没爆出来&#xff0c;当时可能用成小字典了&#xff1b; 猜测可能是把后缀名和MIME绑定检测了&#xff1b; 反正也没思路&#xff0c;…

CentOS8搭建NFS服务

一、服务端搭建——172.16.10.130 1.安装nfs,rpc服务 yum install -y rpcbind yum install -y nfs-utils2.创建共享目录 test1共享目录 mkdir /home/nfs/disk-test1 chmod 777 /home/nfs/disk-test1test2共享目录 mkdir /home/nfs/disk-test2 chmod 777 /home/nfs/disk-test…

ERROR: xtensa-Ix106-elf-gdb.exe not found!

问题&#xff1a; 我们使用ESP Eexception Decorder时候&#xff0c;报错找不到xtensa-Ix106-elf-gdb.exe执行文件&#xff0c;其实我们注意看输出 显示&#xff1a;gdbPath: C:\Users\TTJ2023\AppData\Local\Arduino15\packages\esp32\tools\xtensa-esp-elf-gdb\11.2_2022082…

算法练习-长度最小的子数组(思路+流程图+代码)

难度参考 难度&#xff1a;简单 分类&#xff1a;数组 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。以下内容均为个人笔记&#xff0c;旨在督促自己认真学习。 题目 给定一个含有个正整数的数组和一个正整数s&#xff0c;找…

用CHAT分析高校体育智慧教学体系构建与探索研究现状

CHAT回复&#xff1a;现阶段&#xff0c;高校体育智慧教学体系的构建与探索研究还处于初级阶段&#xff0c;但全球数字化转型大潮的推动下&#xff0c;一些较为前沿的研究和实践已经开始出现&#xff1a; 1.教学平台的建设&#xff1a;很多高校已经开始尝试使用在线教育平台进行…

锂离子电池二阶RC等效电路模型参数

目前锂离子电池二阶RC等效电路模型是较多学者进行研究的模型&#xff0c;不同的锂离子电池模型参数有差别&#xff0c;但大致在这个范围内&#xff0c;可参考。 等效电路模型&#xff1a; 部分文献离线参数辨识结果&#xff1a; 另一文献的辨识结果&#xff1a;

e2studio开发三轴加速度计LIS2DW12(3)----检测活动和静止状态

e2studio开发三轴加速度计LIS2DW12.3--检测活动和静止状态 概述视频教学样品申请源码下载新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()…

【刷题】 leetcode 2 .两数相加

两数相加 两数相加1 思路一 &#xff08;暴毙版&#xff09;2 思路二 &#xff08;本质出发&#xff09; 谢谢阅读Thanks♪(&#xff65;ω&#xff65;)&#xff89;下一篇文章见&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 两数相加 我们来看…

系统架构的演变:从单体到微服务的旅程

文章目录 前言一、单体架构简图 二、垂直架构简图 三、水平架构简图 四、面向服务架构&#xff08;SOA&#xff09;简图 五、微服务架构简图 总结 前言 随着信息技术的快速发展&#xff0c;系统架构也在不断演变。从早期的单体架构到现代的微服务架构&#xff0c;每一次的变革都…

Numpy的学习 第一课 了解以及使用

1.输入模式 1.编辑模式 绿色2.命令模式 蓝色 2.运行 直接输入jupyter notebook 3.文档注释 查看函数帮助文档命令 help(函数) 单问号与多问号 单问号显示文档 多问号显示文档代码 3.shifttab 显示参数 4.运行外部文件 %run 路径,可绝对可相对 这里运行了就相当于方法了,或者…

C++ 之LeetCode刷题记录(十二)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅。 依旧是追求耗时0s的一天。 69. x 的平方根 示例 1&#xff1a; 输入&#xff1a;x 4 输出&#xff1a;2 示例 2&#xff1a; 输入&#x…

软件测试|使用Python轻松裁剪视频

简介 裁剪视频是在视频编辑和处理中常见的任务之一&#xff0c;Python提供了多种库和工具&#xff0c;可以用来裁剪视频。在本文中&#xff0c;我们将详细讨论如何使用Python来裁剪视频&#xff0c;并提供示例代码。 步骤1&#xff1a;环境准备 首先&#xff0c;我们要安装必…

交换机配置及网络测试

实验环境 拓扑图 Ip规划表 部门 主机数量 网络地址 子网掩码 网关 可用ip Vlan 市场部 38 192.168.131.0 255.255.255.0 192.168.131.1 2-254 11 研发部 53 192.168.132.0 255.255.255.0 192.168.132.1 2-254 12 财务部 9 192.168.133.0 255.255.255…

更适合3D项目的UI、事件交互!纯国产数字孪生引擎持续升级中!!!

UI和事件交互是3D可视化项目中最常见的模块&#xff0c;主要用于信息添加、展示&#xff0c;用来确保按照用户需求呈现内容并完成交互。 平时工作在进行UI和交互设计时&#xff0c;经常出现以下问题&#xff1a;UI过于复杂导致3D项目内交互效率低下&#xff0c;或者是结合3D项目…