赞
踩
目录
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 具有以下优势和特点:
和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等) | 没有 | 没有 |
通过在Maven或Gradle中添加以下依赖来使用Redisson
- <dependency>
- <groupId>org.redisson</groupId>
- <artifactId>redisson</artifactId>
- <version>3.13.6</version>
- </dependency>
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的连接池配置。
注意配置中的其它参数也会影响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监控间隔,单位:毫秒
为了感受 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);
-
- }
- }
在网上能看到这么一张图,这些都是使用redisson+redis可以实现的功能, 由此可见其功能只强大。
这部分内容可以参考:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。