java中的Redis锁密钥

java中的Redis锁密钥,java,multithreading,server,redis,Java,Multithreading,Server,Redis,我在java项目中使用Redis,我需要获取一个键的值,然后进行一些修改,然后再次设置该键的值。 我的要求是,如果一个线程得到一个键的值,那么另一个线程应该等待,直到第一个线程为该键设置了值。 我本可以使用Synchronized,但我们在项目中使用了多服务器,因此Synchronized在这种情况下不起作用。 有人能给我推荐一些其他的解决方法吗 我认为project是您的最佳解决方案 免责声明:我是Redisson项目的成员 Redisson理解使用redis需要一种更抽象的方式,因此我们创建

我在java项目中使用Redis,我需要获取一个键的值,然后进行一些修改,然后再次设置该键的值。 我的要求是,如果一个线程得到一个键的值,那么另一个线程应该等待,直到第一个线程为该键设置了值。 我本可以使用Synchronized,但我们在项目中使用了多服务器,因此Synchronized在这种情况下不起作用。 有人能给我推荐一些其他的解决方法吗

我认为project是您的最佳解决方案

免责声明:我是Redisson项目的成员

Redisson理解使用redis需要一种更抽象的方式,因此我们创建了许多对象和服务,它们在您自己的redis之上工作,并公开了标准java接口。所有这些对象和服务都是分布式和线程安全的

为了解决您的问题,我们有很多选项供您选择:锁(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
如果您想了解更多信息,请访问我们的网站

,我认为project是您的最佳解决方案

免责声明:我是Redisson项目的成员

Redisson理解使用redis需要一种更抽象的方式,因此我们创建了许多对象和服务,它们在您自己的redis之上工作,并公开了标准java接口。所有这些对象和服务都是分布式和线程安全的

为了解决您的问题,我们有很多选项供您选择:锁(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

如果您想了解更多信息,请在键入此问题时访问我们的网站

,您已经完成了Redis自己的一半。在这里发布问题之前,请做一些研究。在您键入此问题的时间内,您将完成Redis自己的一半。在这里发布问题之前,请做一些研究。我在我的项目中使用了Redisson,它运行了一段时间,但它开始给我错误,如下所示。我不知道是什么导致了这个错误。[link]()其中一个可能的原因是您试图创建大量Redisson实例。通常,每个应用程序只需要一个Redisson实例。我可以为一个RedissonClient实例创建多个RLock实例吗。@Redisson_RuiGu您有关于如何决定使用哪个锁的指南吗?例如,如果我有一个Redis集群,FairLock是否可以安全使用?或者它是否存在一些问题,建议我设置额外的独立Redis服务器并使用RedLock?我在项目中使用Redisson,它工作了一段时间,但随后它开始给我错误,如下所示。我不知道是什么导致了这个错误。[link]()其中一个可能的原因是您试图创建大量Redisson实例。通常,每个应用程序只需要一个Redisson实例。我可以为一个RedissonClient实例创建多个RLock实例吗。@Redisson_RuiGu您有关于如何决定使用哪个锁的指南吗?例如,如果我有一个Redis集群,FairLock是否可以安全使用?或者它是否存在一些问题,建议我设置额外的独立Redis服务器并使用RedLock?