使用Redisson实现分布式锁
2017-08-18 11:34
537 查看
在集群环境中实现分布式锁有很多方法,最常见的是使用数据库(大部分数据库都有內建的锁或原子操作)或zookeeper管理共享资源。如果不想搭建zookeeper集群或者未来有计划更换数据库,使用Redis是一个不错的方案。
Redis支持setnx锁定key。而Redisson是一个非常不错的java开源Redis客户端,它实现了Redis锁。
我们首先定义一个分布式锁接口(面向接口编程,对不同的分布式锁实现提供不同的实现类)。
以下是基于Resisson和Redis的分布式锁实现
Redis支持setnx锁定key。而Redisson是一个非常不错的java开源Redis客户端,它实现了Redis锁。
我们首先定义一个分布式锁接口(面向接口编程,对不同的分布式锁实现提供不同的实现类)。
public interface DistributedLocker { public <T> T lock(String resourceName, AquiredLockWorker<T> worker) throws UnableToAquireLockException, Exception; public <T> T lock(String resourceName, AquiredLockWorker<T> worker, int lockTime) throws UnableToAquireLockException, Exception; }
public interface AquiredLockWorker<T> { public T invokeAfterLockAquire() throws Exception; }
以下是基于Resisson和Redis的分布式锁实现
@Component public class RedisLocker implements DistributedLocker{ private final static String LOCKER_PREFIX = "lock:"; @Autowired private RedissonConnector rdsConnector; @Override public <T> T lock(String resourceName, AquiredLockWorker<T> worker) throws InterruptedException, UnableToAquireLockException, Exception { return lock(resourceName, worker, 100); } @Override public <T> T lock(String resourceName, AquiredLockWorker<T> worker, int lockTime) throws UnableToAquireLockException, Exception { RedissonClient redisson = rdsConnector.getClient(); RLock lock = redisson.getLock(LOCKER_PREFIX + resourceName); // Wait for 100 seconds seconds and automatically unlock it after lockTime seconds boolean success = lock.tryLock(100, lockTime, TimeUnit.SECONDS);; if (success) { try { return worker.invokeAfterLockAquire(); } finally { lock.unlock(); } } throw new UnableToAquireLockException(); } }
相关文章推荐
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁-Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- 基于Redis实现分布式锁,Redisson使用及源码分析
- Java之——redis并发读写锁,使用Redisson实现分布式锁
- 使用Redisson实现分布式锁
- 使用Redisson实现分布式锁
- perl使用 Gearman 实现分布式处理
- 使用JOTM实现分布式事物管理(多个数据源)
- 如何使用WCF服务实现分布式处理数据?
- 使用JOTM实现分布式事务管理(多数据源)
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
- 使用JOTM实现分布式事务管理(多数据源)
- 分布式搜索elasticsearch java API 使用More like this实现
- 使用redis实现分布式锁,可以解决集群中需要单例的情况
- 使用JAVA中RMI机制来实现分布式程序(2)
- 使用Java中RMI机制来实现分布式程序
- 使用Java中RMI机制来实现分布式程序