Redission is a Java-based distributed cache and object storage framework. It provides a variety of distributed data structures and services, such as lists, sets, queues, maps, bitmaps, HyperLogLog, geospatial indexing, etc.
It supports Redis protocol and JCache API, and provides many features such as real-time statistics, Pub/Sub, Lua script writing, etc., making it more convenient for applications to use and manage distributed data.
It also has advantages such as high performance, high reliability, and scalability.
Redission是一个Java实现的分布式缓存和分布式对象存储框架,它提供了许多分布式数据结构和服务,如列表、集合、队列、映射、位图、HyperLogLog、Geospatial索引等。
它支持Redis协议和JCache API,并提供了许多功能,如实时统计、Pub/Sub、Lua脚本编写等,使得应用程序可以更加方便地使用和管理分布式数据。
同时也具有高性能、高可靠性和可扩展性等优势。
Based on high-performance async and lock-free Java Redis client and Netty framework.
基于高性能异步和无锁的Java Redis Client 和Netty。
<dependency>
<groupId>org.redissongroupId>
<artifactId>redissonartifactId>
<version>3.24.1version>
dependency>
Config config = new Config();
config.useClusterServers()
// 集群状态扫描间隔时间,单位是毫秒
.setScanInterval(2000)
//cluster方式至少6个节点
.addNodeAddress("redis://127.0.0.1:6379" )
.addNodeAddress("redis://127.0.0.1:6380")
.addNodeAddress("redis://127.0.0.1:6381")
.addNodeAddress("redis://127.0.0.1:6382")
.addNodeAddress("redis://127.0.0.1:6383")
.addNodeAddress("redis://127.0.0.1:6384");
or read config from file
或者读取配置文件
Config config = Config.fromYAML(new File("config-file.yaml"));
// Sync and Async API
RedissonClient redisson = Redisson.create(config);
RMap<Object, Object> map = redisson.getMap("map_key");
RLock rLock = map.getLock("key");
try {
// lock 上锁
rLock.lock();
Object v = map.get(k);
// todo 业务逻辑
} finally {
rLock.unlock();
}
5. Get Redis based implementation of java.util.concurrent.locks.Lock
try {
//获取锁对象
RLock lock = redisson.getLock("my_key");
//加锁
lock.lock(3, TimeUnit.SECONDS);
//todo 业务
} finally {
lock.unlock();
}
try {
//获取锁对象
RLock lock = redisson.getLock("my_key");
//加锁,默认过期30秒,并触发Watchdog进行续期
lock.lock();
//todo 业务
} finally {
lock.unlock();
}
如果一个拿到锁的线程正常执行任务但还没完成,那么看门狗会延长锁超时时间,锁不会因为超时而被释放。
看门狗默认续期时间是30s,可以通过修改Config.lockWatchdogTimeout指定时间。
如果使用lock方法传入过期时间leaseTime,那么超时自动解锁,不会触发Watch Dog延长时间。
RScheduledExecutorService executorService = redisson.getExecutorService("my_key");
//3秒时间后执行任务
executorService.schedule(()->{
//todo 业务逻辑
},3,TimeUnit.SECONDS);
//2秒后执行,每3秒执行一次
executorService.scheduleAtFixedRate(()->{
//业务逻辑
}, 2,3,TimeUnit.SECONDS);
//2秒后执行,每3秒执行一次
executorService.scheduleWithFixedDelay(()->{
//业务逻辑
}, 2,3,TimeUnit.SECONDS);