我在我的java项目中使用Redis,我需要获取一个键的值,然后做一些修改,然后再次设置该键的值。 我的要求是,如果一个线程获得了键的值,那么另一个线程应该等到第一个线程设置该键的值。 我本可以使用同步,但我们在项目中使用多个服务器,因此同步不适用于这种情况。 任何人都可以为我建议这种情况的其他解决方案。
我认为Redisson项目是你的完美解决方案。
免责声明:我是瑞迪生项目的成员
Redisson 理解需要一种更抽象的方式来使用 redis,因此我们创建了许多对象和服务,这些对象和服务在您自己的 Redis 之上工作,并公开了标准的 Java 接口。所有这些对象和服务都是分布式的,并且是线程安全的。
为了解决您的问题,我们有很多锁和同步器供您选择:Lock(ReentrantLock(,FairLock,MultiLock,RedLock(如官方文档中所述,是的,我们已经阅读了所有内容(,ReadWriteLock,信号量,PermitExpirableSemaphore,CountDownLatch。
用法再简单不过了:
节点 1:
Config config = ;//create your own configuration object based on connections types
RedissonClient redisson = Redisson.create(config);
//The Lock is just a java.util.concurrent.locks.Lock
Lock lock = redisson.getLock("myLock");
lock.lock();
//or if you want to have a lease time on the lock
((RLock) lock).lock(10, TimeUnit.SECONDS);
//do other business here.
lock.unlock();
节点 2:
//The same as node1
如果您想了解更多信息,请访问我们的网站 https://redisson.org