Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。其中包括(
BitSet
,Set
,Multimap
,SortedSet
,Map
,List
,Queue
,BlockingQueue
,Deque
,BlockingDeque
,Semaphore
,Lock
,AtomicLong
,CountDownLatch
,Publish / Subscribe
,Bloom filter
,Remote service
,Spring cache
,Executor service
,Live Object service
,Scheduler service
) Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。如果你现在正在使用其他的Redis的Java客户端,那么Redis命令和Redisson对象匹配列表 能够帮助你轻松的将现有代码迁徙到Redisson框架里来。
Redisson底层采用的是Netty 框架。支持Redis 2.8以上版本,支持Java1.6+以上版本。
例子Boot版本:
<groupId>org.springframework.bootgroupId> <artifactId>spring-boot-starter-parentartifactId> <version>2.7.5version>
Integrates Redisson with Spring Boot library. Depends on Spring Data Redis module.
将Redisson与Spring Boot库集成。取决于Spring Data Redis模块。
<dependency>
<groupId>org.redissongroupId>
<artifactId>redisson-spring-boot-starterartifactId>
<version>2.15.2version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-data-redisartifactId>
<exclusions>
<exclusion>
<groupId>io.lettucegroupId>
<artifactId>lettuce-coreartifactId>
exclusion>
exclusions>
dependency>
spring:
redis:
database: 0
host: '127.0.0.1'
port: 6379
password: '@'
ssl: false
spring:
redis:
redisson:
# 下面 config的值是个字符串
config: |
# (以下值除了连接信息都是默认值)
singleServerConfig:
# 客户端连接的名称
clientName: null
# 连接地址
address: "redis://127.0.0.1:6379"
# 连接服务器密码
password: null
# 如果池连接在超时时间内未使用且当前连接数量大于最小空闲连接池大小,则它将关闭并从池中删除, 以毫秒为单位的值
idleConnectionTimeout: 10000
# 连接 Redis 服务器超时, 以毫秒为单位的值
connectTimeout: 10000
# Redis 服务器响应超时, Redis 命令发送成功后开始倒计时, 以毫秒为单位的值
timeout: 3000
# Redis 命令无法发送到服务器的重试次数
retryAttempts: 3
# 重试间隔时间
retryInterval: 1500
# 连接池最小空闲连接数
connectionMinimumIdleSize: 24
# 连接池大小
connectionPoolSize: 64
# 尝试连接的数据库编号
database: 0
# DNS监测时间间隔,监测DNS的变化情况的时间间隔, 单位:毫秒
dnsMonitoringInterval: 5000
# Redisson内部经常通过发布和订阅来实现许多功能。长期保持一定数量的发布订阅连接是必须的
# Redis 单个连接最大订阅数量 (以下是默认值)
subscriptionsPerConnection: 5
# Redis 多从节点的环境里,每个从服务节点里用于发布和订阅连接的最小保持连接数(长连接)
subscriptionConnectionMinimumIdleSize: 1
# 发布和订阅连接池大小
subscriptionConnectionPoolSize: 50
# 线程池数量
threads: 16
# Netty线程池数量
nettyThreads: 32
# Redis 数据编解码器。在读写 Redis 数据时使用。有几种实现方式可用
codec: ! {}
# 传输模式 (默认NIO)
# EPOLL 要依赖里有netty-transport-native-epoll包 (linux)
transportMode: "NIO"
(单一模式、 复制模式、 集群模式、 哨兵模式、 代理模式)
配置项需要参照
org.redisson.config.Config
,如果你想配置集群模式的Redisson
,就点Config
的成员变量clusterServersConfig
去看下里边有哪些可配置项。
默认值:
30000
监控锁的看门狗超时时间单位为毫秒。该参数只适用于分布式锁的加锁请求中未明确使用
leaseTimeout
参数的情况。如果该看门口未使用lockWatchdogTimeout
去重新调整一个分布式锁的lockWatchdogTimeout
超时,那么这个锁将变为失效状态。这个参数可以用来避免由Redisson客户端节点宕机或其他原因造成死锁的情况。
RedissonAutoConfiguration
已经进行了自动装配, 下面就已经可以进行使用了RedissonClient
RedissonRxClient
RedissonReactiveClient
RedisTemplate
ReactiveRedisTemplate
Try Redisson PRO with ultra-fast performance and support by SLA.
数据序列化说明
Redis命令和Redisson对象匹配列表
Redisson的分布式
RBucket
Java对象是一种通用对象桶可以用来存放任类型的对象。 除了同步接口外,还提供了异步(Async)、反射式(Reactive)和RxJava2标准的接口。
// 注入RedissonClient (ps: 也兼容了RedisTemplate, 在RedissonAutoConfiguration可看到配置了)
@Autowired
private RedissonClient redissonClient;
@Test
public void myEST() throws Exception {
RBucket<String> testBucket = redissonClient.getBucket("test_Bucket");
// 设置值, 并在10秒后失效 (testBucket.setAsync()是异步API或者看文档)
testBucket.set("tenSecond", 10L,TimeUnit.SECONDS);
System.out.println("testBucket.getExpireTime() = " + testBucket.getExpireTime());
System.out.println("testBucket.get() = " + testBucket.get());
System.out.println("testBucket.isExists() = " + testBucket.isExists());
TimeUnit.SECONDS.sleep(10L);
System.out.println("testBucket.get() = " + testBucket.get());
System.out.println("testBucket.isExists() = " + testBucket.isExists());
}
testBucket.getExpireTime() = 1678090013002
testBucket.get() = tenSecond
testBucket.isExists() = true
testBucket.get() = null
testBucket.isExists() = false
其他的看官网文档
@Test
public void myEST() throws Exception {
RMap<String, Object> test_map = redissonClient.getMap("test_Map");
// 不会返回旧值, 快速put
boolean fastPut = test_map.fastPut("t", "hhhh");
System.out.println("fastPut = " + fastPut);
Object put = test_map.put("t", "ggggg");
System.out.println("put = " + put);
// 30秒后过期
boolean expire = test_map.expire(Duration.ofSeconds(30L));
System.out.println("expire = " + expire);
}
fastPut = true
put = hhhh
expire = true
同时提供了, 带元素过期(
getMapCache()
)、 本地缓存功能 (getLocalCachedMap()
)其他的Set、 List、 队列、排序集看官网文档
支持分布式的 普通的可重入锁、 公平锁、 联锁(所有都上锁成功才算加锁成功) 、 红锁、 读写锁(ReadWriteLock)、
信号量(Semaphore)、 闭锁(CountDownLatch)
1