1、引入依赖
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置注入
package com.songjy.spring.demo.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;
/**
* @author songjy
*/
@Configuration
public class RedisLockConfig {
@Bean
public RedisLockRegistry redisLockRegistry(RedisConnectionFactory redisConnectionFactory) {
return new RedisLockRegistry(redisConnectionFactory, "redis-lock-demo");
}
}
3、锁获取与释放示例代码
package com.songjy.spring.demo.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.redis.util.RedisLockRegistry;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
/**
* @author songjy
*/
@RestController
@RequestMapping(value = "/redis")
public class RedisLockController {
private Logger log = LoggerFactory.getLogger(this.getClass());
@Autowired
private RedisLockRegistry redisLockRegistry;
@GetMapping("/lock")
public void lockTest() throws InterruptedException {
/*可重入锁*/
Lock lock = redisLockRegistry.obtain("lock");
boolean lockSuccess1 = lock.tryLock(2L, TimeUnit.SECONDS);
log.info("lockSuccess1 获取状态 : {}", lockSuccess1);
//TODO 你的业务代码
TimeUnit.SECONDS.sleep(4L);
boolean lockSuccess2 = lock.tryLock(2L, TimeUnit.SECONDS);
log.info("lockSuccess2 获取状态 : {}", lockSuccess2);
/*锁释放*/
lock.unlock();
lock.unlock();
}
}
Redis分布式锁实战
Lua + Redis 解决高并发