java中的Redis锁定键

Man*_*mar 2 java multithreading redis server

我在我的 java 项目中使用Redis,我需要获取一个键的值,然后进行一些修改,然后再次设置该键的值。我的要求是,如果一个线程获得了一个键的值,那么另一个线程应该等到第一个线程设置该键的值。我本来可以使用同步的,但我们在项目中使用了多个服务器,因此同步在这种情况下不起作用。谁能建议我针对这种情况的其他解决方案。

Red*_*iGu 6

我认为Redisson项目是您的完美解决方案。

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

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

为了解决您的问题,我们有很多锁和同步器供您选择:Lock(ReentrantLock)、FairLock、MultiLock、RedLock(如官方文档中所述,是的,我们已经阅读了所有内容)、ReadWriteLock、Semaphore、PermitExpirableSemaphore,倒计时闩锁。

用法再简单不过了:

节点 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();
Run Code Online (Sandbox Code Playgroud)

节点2:

//The same as node1
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多信息,请访问我们的网站https://redisson.org