Redisson入门介绍
文章目录
- Redisson入门介绍
-
- [1.1 Redisson简介](#1.1 Redisson简介)
-
- [1.1.1 起源和历史](#1.1.1 起源和历史)
- [1.1.2 优势和特点](#1.1.2 优势和特点)
- [1.1.3 与其他Java Redis客户端的比较](#1.1.3 与其他Java Redis客户端的比较)
- [1.2 使用和配置](#1.2 使用和配置)
-
- [1.2.1 依赖和SDK](#1.2.1 依赖和SDK)
- [1.2.2 配置文件解析](#1.2.2 配置文件解析)
- [1.2.3 连接池配置](#1.2.3 连接池配置)
- [1.3 优雅的让Hash的某个Field过期](#1.3 优雅的让Hash的某个Field过期)
- [2. 参考资料](#2. 参考资料)
- [3. 源码地址](#3. 源码地址)
- [4. Redis从入门到精通系列文章](#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
, CountDownLatch
,Publish / Subscribe
,Bloom 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)的比较,足以看出来他的天下无敌。
Redisson | Jedis | Lettuce | |
---|---|---|---|
Redis数据类型支持 | 支持全部(包括流) | 支持全部 | 支持全部 |
高级Java对象 | 多班并发和分布式Java对象 | 没有 | 没有 |
连接池 | 有 | 有 | 有 |
集群支持 | 有 | 有 | 有 |
故障转移 | 有 | 没有 | 有 |
母子复制支持 | 有 | 没有 | 有 |
SSL支持 | 有 | 有 | 有 |
LUA scripting | 有 | 有(只读) | 有(只读) |
响应式API | 有 | 没有 | 有 |
事务支持 | 有 | 有 | 有 |
分布式锁 | 有(包括公平锁) | 没有 | 没有 |
公平锁支持 | 有 | 没有 | 没有 |
发布和订阅 | 有 | 有 | 有 |
异步API | 有 | 没有 | 有 |
分布式服务 | 有(例如BloomFilter,BitSet,AtomicLong等) | 没有 | 没有 |
1.2 使用和配置
1.2.1 依赖和SDK
通过在Maven或Gradle中添加以下依赖来使用Redisson
xml
<dependencies>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.13.6</version>
</dependency>
</dependencies>
1.2.2 配置文件解析
Redisson可以通过JSON, YAML, Map或者编程配置。以下是一个配置示例:
bash
# 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 连接池配置
通过在配置中设置 connectionMinimumIdleSize
和 connectionPoolSize
参数,可以进行Redisson的连接池配置。
connectionMinimumIdleSize
:最小空闲连接数,表示即使没有数据库连接时依然维持的空闲连接数量。默认值:32connectionPoolSize
:最大连接池数量,对所有ROUTER节点来说,都是公用的。默认值:64
注意配置中的其它参数也会影响Redisson的性能和行为,比如timeout
, retryAttempts
, retryInterval
等等。应根据实际应用需要来调整这些参数。
当然,我们可以为每个配置项添加注释,以方便理解每个参数的作用。下面是带注释的YAML配置文件:
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过期。
引入依赖。
xml
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.16.1</version>
</dependency>
redisson.yaml
示例:
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
测试
java
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. 参考资料
-
Redisson官方网站:https://redisson.org/
-
Redisson GitHub仓库:https://github.com/redisson/redisson
-
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入门介绍,全部内容就是这些。如果你有疑问或见解可以在评论区留言。