简介
Redisson采用了基于NIO的Netty框架,不仅能作为Redis底层驱动客户端,具备提供对Redis各种组态形式的连接功能:Redis命令能以以下方式处理,同时可以LUA脚本执行处理,以及处理返回结果的功能
- 同步发送
- 异步形式发送
- 异步流形式发送
- 管道形式发送的功能
还在此基础上融入了更高级的应用方案,不但将原生的Redis Hash,List,Set,String,Geo,HyperLogLog等数据结构封装为Java里大家最熟悉的映射(Map),列表(List),集(Set),通用对象桶(Object Bucket),地理空间对象桶(Geospatial Bucket),基数估计算法(HyperLogLog)等结构
在这基础上还提供了分布式的多值映射(Multimap),本地缓存映射(LocalCachedMap),有序集(SortedSet),计分排序集(ScoredSortedSet),字典排序集(LexSortedSet),列队(Queue),阻塞队列(Blocking Queue),有界阻塞列队(Bounded Blocking Queue),双端队列(Deque),阻塞双端列队(Blocking Deque),阻塞公平列队(Blocking Fair Queue),延迟列队(Delayed Queue),布隆过滤器(Bloom Filter),原子整长形(AtomicLong),原子双精度浮点数(AtomicDouble),BitSet等Redis原本没有的分布式数据结构。
不仅如此,Redisson还实现了Redis文档中提到像分布式锁Lock这样的更高阶应用场景,在分布式锁的基础上还提供了联锁(MultiLock),读写锁(ReadWriteLock),公平锁(Fair Lock),红锁(RedLock),信号量(Semaphore),可过期性信号量(PermitExpirableSemaphore)和闭锁(CountDownLatch)这些实际当中对多线程高并发应用至关重要的基本部件。
Redisson广泛的使用了承载于Redis订阅发布功能之上的分布式话题(Topic)功能。使得即便是在复杂的分布式环境下,Redisson的各个实例仍然具有能够保持相互沟通的能力。在以这为前提下,结合了自身独有的功能完善的分布式工具,Redisson进而提供了像分布式远程服务(Remote Service),分布式执行服务(Executor Service)和分布式调度任务服务(Scheduler Service)这样适用于不同场景的分布式服务。使得Redisson成为了一个基于Redis的Java中间件(Middleware)
帮助文档:https://www.bookstack.cn/read/redisson-wiki-zh/Redisson%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%
Spring集成
Maven
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson-spring-boot-starter</artifactId>
<version>3.12.2</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>2.7.0</version>
</dependency>
yml配置
clusterServersConfig:
idleConnectionTimeout: 10000
pingTimeout: 1000
connectTimeout: 5000
timeout: 3000
retryAttempts: 3 #重试次数
retryInterval: 1500
password: 123456
subscriptionsPerConnection: 5 #单个连接最大订阅数量
slaveSubscriptionConnectionMinimumIdleSize: 1
slaveSubscriptionConnectionPoolSize: 50
slaveConnectionMinimumIdleSize: 32 #节点最小空闲连接数
slaveConnectionPoolSize: 64 #节点连接池大小
masterConnectionMinimumIdleSize: 32
masterConnectionPoolSize: 64 #节点连接池大小
readMode: "SLAVE"
nodeAddresses:
- "redis://10.110.27.139:6379"
- "redis://10.110.27.139:6380"
- "redis://10.110.27.139:6381"
- "redis://10.110.27.138:6379"
- "redis://10.110.27.138:6380"
- "redis://10.110.27.138:6381"
scanInterval: 1000
transportMode: NIO
Spring配置类实现
//spring集成,一般直接集成下面的插件即可,自动的启动
public class InitializingRedis{
public RedissonClient getRedissonClient() throws IOException {
ResourceLoader loader = new DefaultResourceLoader();
Resource resource = loader.getResource("redis.yml");
Config config = Config.fromYAML(resource.getInputStream());
config.useClusterServers();
return Redisson.create(config);
}
}
调用
普通调用
RedissonClient是线程安全的,由于其内部是通过Netty通信,所以除了同步执行方式,也支持异步执行。同步我们使用RedissonClient,异步使用RedissonReactiveClient.
private RedissonClient redisson;
自定义工具类(建议)
非集群模式
//人工获取对象
public class RedissonManager {
private static Config config = new Config();
private static Redisson redisson = null; //声明redisso对象
//实例化redisson
static{
config.useSingleServer().setAddress("127.0.0.1:6379");
redisson = (Redisson) Redisson.create(config);//得到redisson对象
}
//获取redisson对象的方法
public static Redisson getRedisson(){
return redisson;
}
}
集群模式
public void cluster() {
Config config = new Config();
config.useClusterServers()
.setScanInterval(1000 * 2)
.addNodeAddress("redis://10.49.196.20:7000", "redis://10.49.196.20:7001")
.addNodeAddress("redis://10.49.196.21:7000", "redis://10.49.196.21:7001")
.addNodeAddress("redis://10.49.196.22:7000", "redis://10.49.196.22:7001")
.setPassword("123456")
.setMasterConnectionPoolSize(5)
.setMasterConnectionMinimumIdleSize(2)
.setSlaveConnectionPoolSize(5)
.setSlaveConnectionMinimumIdleSize(2);
RedissonClient client = Redisson.create(config);
RBucket<String> name = client.getBucket("name");
name.set("赵云");
System.out.println(name.get());
}
}
















