在分布式环境中,很多场景都需要分布式锁如:秒杀、ID生成等,今天介绍一种redis官方推荐的方法——使用redission实现分布式锁,这是最常用的锁,可重入锁的实现方式
引入jar包:
<dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.8.1</version> </dependency>
初始化连接:这里使用的是集群,其他非集群方式也很简单,百度一下就可以了
@Configuration public class RedissonInit { @Bean public static RedissonClient getInstance(){ Config config = new Config(); config.useClusterServers() // cluster state scan interval in milliseconds .setScanInterval(20000) .addNodeAddress("http://192.168.0.99:7001", "http://192.168.0.99:7002") .addNodeAddress("http://192.168.0.99:7003"); RedissonClient redisson = Redisson.create(config); return redisson; } }
在你需要使用锁的service中直接引入RedissonClient对象:
@Autowired public RedissonClient redissonClient;
使用可重入锁:
// 最常见的使用方法 RLock lock = redissonClient.getLock("testLock"); lock.lock(); //... lock.unlock(); //另外Redisson还通过加锁的方法提供了leaseTime的参数来指定加锁的时间。超过这个时间后锁便自动解开了。 // 加锁以后10秒钟自动解锁 // 无需调用unlock方法手动解锁 lock.lock(10, TimeUnit.SECONDS); // 尝试加锁,最多等待100秒,上锁以后10秒自动解锁 boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS); if (res) { try { ... } finally { lock.unlock(); } }
以上就通过redisson实现了分布式锁,简单到一看就会,如果你仔细看了一遍的话,当然如果你还需要了解redisson其他的一些锁的应用的话,你就得好好研究一下它了,还有很多其他类型的锁,但是这个是最常用的,希望对你有帮助