Md *_*din 4 java redis distributed-lock jedis
我有两个Java应用程序(app1,app2)。两个应用程序都将JedisCluster客户端用于Redis集群。app1从Redis集群写入或读取数据。app2就像一个调度程序,仅将一些数据写入Redis集群。它在固定的时间间隔后运行。我必须确保当app2执行写操作时,直到app2完成整个写操作后,才为app1提供数据或为之写数据。我想在app2运行时为app1锁定Redis集群。当时app1是否获得异常无关紧要。
看来您需要应用程序级锁来确保来自不同应用程序范围的线程安全操作,这与分布式锁几乎相同。对于Jedis,快速搜索即可生成Jedis-lock库。
Jedis jedis = new Jedis("localhost");
JedisLock lock = new JedisLock(jedis, "lockname", 10000, 30000);
lock.acquire();
try {
// do some stuff
}
finally {
lock.release();
}
System.out.println(jedis.isLocked());
System.out.println(jedis.isRemoteLocked());
Run Code Online (Sandbox Code Playgroud)
根据Jedis-lock的所有者(感谢此项目)的说法,该项目已不再维护/不再合并请求。该分叉现已得到积极维护,并具有以下新功能:
SETAPI代替了旧的SETNXrelease()JedisCluster你尝试过Redisson的锁吗?它是一个基于 Redis 的框架。
它提供了Lock对象实现的java.util.concurrent.locks.Lock接口并且易于使用。
RedissonClient redisson = Redisson.create(config);
RLock lock = redisson.getLock("myLock");
lock.lock();
try {
// ...
} finally {
lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)
它还提供锁对象的异步版本。
| 归档时间: |
|
| 查看次数: |
3413 次 |
| 最近记录: |