引依赖
<!--redission相关-->
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.5</version>
</dependency>
改配置
spring.redis.host=localhost
spring.redis.port=6379
配置类
@Configuration
public class RedissonConfig {
@Bean
public RedissonClient getRedisson(){
//单机模式,依次设置redis地址和密码
Config config = new Config();
config.useSingleServer().setAddress("redis://localhost:6379");
return Redisson.create(config);
}
}
Controller
使用jmeter进行并发访问
@RestController
@Slf4j
public class RedisController {
@Resource
private RedissonClient redisson;
@Resource
private RedisTemplate<String, Object> redisTemplate;
@GetMapping("/lock/test")
public void test() {
String lockKey = "local_key";
RLock lock = redisson.getLock(lockKey);
try {
lock.lock();
Integer stock = (Integer) redisTemplate.opsForValue().get("product"); //校验是否还有库存
if (stock > 0) {
int realStock = stock - 1;
redisTemplate.opsForValue().set("product", realStock); //更新库存
log.info("{}抢到锁,扣减成功,剩余库存:{}", Thread.currentThread().getName(), realStock);
} else {
log.warn("{}抢到锁,扣减失败,库存不足!", Thread.currentThread().getName());
}
} catch (Exception e) {
log.warn("系统错误,稍后重试");
} finally {
lock.unlock(); //删除锁
}
}
}