【实践篇】Redis最强Java客户端(一)之Redisson入门介绍

news2025/1/17 6:04:01

Redisson入门介绍

文章目录

  • Redisson入门介绍
    • 1.1 Redisson简介
      • 1.1.1 起源和历史
      • 1.1.2 优势和特点
      • 1.1.3 与其他Java Redis客户端的比较
    • 1.2 使用和配置
      • 1.2.1 依赖和SDK
      • 1.2.2 配置文件解析
      • 1.2.3 连接池配置
  • 1.3 优雅的让Hash的某个Field过期
  • 2. 参考资料
  • 3. 源码地址
  • 4. Redis从入门到精通系列文章

在这里插入图片描述

1.1 Redisson简介

在这里插入图片描述

1.1.1 起源和历史

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

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

1.1.2 优势和特点

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

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

1.1.3 与其他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等)没有没有

1.2 使用和配置

1.2.1 依赖和SDK

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

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

1.2.2 配置文件解析

Redisson可以通过JSON, YAML, Map或者编程配置。以下是一个配置示例:

# 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

1.2.3 连接池配置

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

  • connectionMinimumIdleSize:最小空闲连接数,表示即使没有数据库连接时依然维持的空闲连接数量。默认值:32
  • 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监控间隔,单位:毫秒

1.3 优雅的让Hash的某个Field过期

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

引入依赖。

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

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);
 
    }
}

2. 参考资料

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

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

  3. redisson 参考文档 https://redisson.org/documentation.html

3. 源码地址

https://github.com/wangshuai67/icepip-springboot-action-examples
https://github.com/wangshuai67/Redis-Tutorial-2023

4. 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入门介绍,全部内容就是这些。如果你有疑问或见解可以在评论区留言。

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

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

相关文章

9. xaml ComboBox控件

1.运行图像 2.运行源码 a.Xaml源码 <Grid Name="Grid1"><!--IsDropDownOpen="True" 默认就是打开的--><ComboBox x:Name="co

flink的网络缓冲区

背景 在flink的taskmanager进行数据交互的过程中&#xff0c;网络缓冲区是一个可以提升网络交换速度的设计&#xff0c;此外&#xff0c;flink还通过网络缓冲区实现其基于信用值credit的流量控制&#xff0c;以便尽可能的处理数据倾斜问题 网络缓冲区 在flink中每个taskmana…

Jetsonnano B01 笔记6:开启USB摄像头

今日继续我的Jetsonnano学习之路&#xff0c;今日尝试开启一下USB摄像头&#xff0c;显示拍摄的内容。 测试代码是搬运的官方说明&#xff0c;这里只是作笔记记录学习&#xff1a; 目录 额外模块准备&#xff1a; 测试代码分析&#xff1a; 运行效果&#xff1a; 额外模块准…

【Windows】磁盘管理无法删除卷

磁盘管理无法删除卷 由于HP Cloud Recovery Tool在对U盘分区时出现闪退 尝试在Windows磁盘管理中使U盘恢复“未分配状态” 右键删除卷出现报错 虚拟磁盘管理器&#xff1a;不支持该请求 ✨解决方案 使用diskpart命令行工具 在Terminal运行如下命令行 diskpart # 列出所有…

C++ day 3

1、 自行封装一个栈的类&#xff0c;包含私有成员属性&#xff1a;栈的数组、记录栈顶的变量&#xff0c;成员函数完成&#xff1a;构造函数、析构函数、拷贝构造函数、入栈、出栈、清空栈、判空、判满、获取栈顶元素、求栈的大小 stack.h #ifndef STACK_H #define STACK_H#…

业务安全详解

文章目录 一、 业务安全概述1.1 业务安全现状1.1.1 业务逻辑漏洞1.1.2 黑客攻击的目标 二、 业务安全测试2.1 业务安全测试流程2.1.1 测试准备2.1.2 业务调研2.1.3 业务建模2.1.4 业务流程梳理2.1.5 业务风险点识别2.1.6 开展测试2.1.7 撰写报告 三、 业务安全经典场景3.1 业务…

【Java 基础篇】Java Set 集合详解:轻松管理不重复元素

在 Java 编程中&#xff0c;集合是一个非常重要的概念&#xff0c;它允许我们有效地存储和管理一组对象。其中之一是 Set 集合&#xff0c;它是一种无序、不重复的数据结构&#xff0c;非常适合用于存储不重复的元素。本篇博客将深入探讨 Java 中的 Set 集合&#xff0c;从基本…

数电课程设计——课设二:交通信号灯

一、实验内容 &#xff08;1&#xff09;十字路口有 x、y 方向两组交通信号灯&#xff0c;每组有红、黄、绿灯各一个&#xff1b; &#xff08;2&#xff09;设计一个交通灯控制电路&#xff0c;模拟十字路口交通灯工作情况&#xff0c;红灯亮 35s&#xff0c;黄灯亮 5s&…

IP的基础知识

IP IP指网际互连协议&#xff0c;Internet Protocol的缩写&#xff0c;是TCP/IP体系中的网络层协议。 设计IP的目的是提高网络的可扩展性&#xff1a;一是解决互联网问题&#xff0c;实现网络的互联互通&#xff1b;二是解除顶层网络应用和底层网络技术之间的耦合。 根据端到端…

btree学习笔记

简介 btree&#xff1a;balance tree&#xff0c;平衡多叉树&#xff0c;类比avl&#xff1a;平衡二叉树&#xff0c;都是有平衡的属性 (多个子树高度一致)&#xff0c;只不过是二叉和多叉的区别。 使用场景 文件系统如extfs、jffs&#xff0c;sql&#xff0c;磁盘上的索引查…

VirtualBox(内有Centos 7 示例安装)

1常见概念以及软件安装 1.1 虚拟化技术&#xff1a; 虚拟化技术指的是将计算机的各种硬件资源加以抽象、转换、分割&#xff0c;最后组合 起来的技术。其目的和作用主要是打破硬件资源不可分的情况&#xff0c;方便程序员自 己集成所需资源。 1.2 Virtual Box 其是虚拟化技术作…

[源码系列:手写spring] IOC第十三节:Bean作用域,增加prototype的支持

为了帮助大家更深入的理解bean的作用域&#xff0c;特意将BeanDefinition的双例支持留到本章节中&#xff0c;创建Bean,相关Reader读取等逻辑都有所改动。 内容介绍 在Spring中&#xff0c;Bean的作用域&#xff08;Scope&#xff09;定义了Bean的生命周期和可见性。包括单例和…

【redis进阶】基础知识简要回顾

1. 常见功能介绍 聚合统计 使用list集合的差集、并集来统计 排序统计 SortedSet&#xff08;ZSet&#xff09;统计&#xff0c;再利用分页列出权重高的元素 二值状态统计 BitMap存储&#xff0c;获取并统计 SETBIT uid:sign:3000:202008 2 1 GETBIT uid:sign:3000:202008 2…

Linux动态链接懒加载

Linux动态链接懒加载 懒加载 最近一个名词——懒加载&#xff0c;是一种与动态链接相关的技术&#xff0c;我对它有点感兴趣&#xff0c;于是决定深入了解一番。 懒加载是一种延迟加载资源的策略&#xff0c;它将资源的加载推迟到在首次访问或需要时才执行。这意味着在应用程…

Paper: 利用RNN来提取恶意软件家族的API调用模式

论文 摘要 恶意软件家族分类是预测恶意软件特征的好方法&#xff0c;因为属于同一家族的恶意软件往往有相似的行为特征恶意软件检测或分类方法分静态分析和动态分析两种&#xff1a; 静态分析基于恶意软件中包含的特定签名进行分析&#xff0c;优点是分析的范围覆盖了整个代码…

【Unity3D】UI Toolkit自定义元素

1 前言 UI Toolkit 支持通过继承 VisualElement 实现自定义元素&#xff0c;便于通过脚本控制元素。另外&#xff0c;UI Toolkit 也支持将一个容器及其所有子元素作为一个模板&#xff0c;便于通过脚本复制模板。 如果读者对 UI Toolkit 不是太了解&#xff0c;可以参考以下内容…

《AI辞职信一键生成》告别凡俗套路,展现独特个性!

在这个科技日新月异的时代&#xff0c;我们的生活被各种应用软件深深地渗透。其中&#xff0c;讯飞星火AI大模型的应用无疑是一种创新和突破。最近&#xff0c;我有幸体验了一款名为《AI辞职信一键生成》的web应用&#xff0c;它以其独特的功能和出色的用户体验&#xff0c;让我…

微信小程序Day2笔记

1、WXML模板语法 1. 数据绑定 数据绑定的基本原则 在data中定义数据在WXML中使用数据 2. 在data中定义页面的数据 在页面对应的.js文件中&#xff0c;把数据定义到data对象中。 3. Mustache语法的格式 把data中的数据绑定到页面中渲染&#xff0c;使用Mustache语法&…

不推介使用裸指针的几种情况

情况一&#xff1a; //原生指针没有所有权 void f() {// 不好: 原生指针拥有了所有权int* p1 new int{7}; // ... }template<typename T> class X {public:T* p; // 不好: 不清楚 p 所有权T* q; // 不好: 不清楚 q 所有权// ... };// 不好: 不清楚返回值所有权 Gadget*…