知乎专栏 |
目录
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency>
<dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-redis</artifactId> </dependency>
package cn.netkiller.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.integration.redis.util.RedisLockRegistry; @Configuration public class RedisLockRegistryConfiguration { @Bean public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) { return new RedisLockRegistry(redisConnectionFactory, "netkiller-lock"); } }
@Bean(destroyMethod = "destroy") public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) { return new RedisLockRegistry(redisConnectionFactory, "neo-lock", TimeUnit.MINUTES.toMillis(10)); }
@Autowired private RedisLockRegistry redisLockRegistry; Lock lock = redisLockRegistry.obtain(device); if (lock.tryLock()) { try { // manipulate protected state } finally { lock.unlock(); } } else { // perform alternative actions }
@Autowired private RedisLockRegistry redisLockRegistry; Lock lock = redisLockRegistry.obtain(key); boolean locked = false; try { locked = lock.tryLock(); if (!locked) { // 没有获取到锁的逻辑 } // 获取锁的逻辑 } finally { if (locked) { lock.unlock(); } }
如果没有上锁,上锁后返回 true 状态。如果已经上锁阻塞等待10秒,然后再返回锁状态
public boolean isLock(String device) { Lock lock = redisLockRegistry.obtain(device); boolean status = false; try { status = lock.tryLock(10, TimeUnit.SECONDS); } catch (Exception e) { log.info(e.getMessage()); } log.warn("status: {} <<<<<<<<<<", status); return status; }