1 添加依赖
2 编写配置类(文件)
我这里是单机版的
/**
* 编写redisson单机版配置类
*/
@Configuration
public class RedissonConfig {
@Bean
public Redisson getRedisson() throws IOException {
Config config = new Config();
//单机版
config.useSingleServer().setAddress("redis://192.168.1.11:6379").setDatabase(0);
return (Redisson) Redisson.create(config);
}
}
如果编写集群什么的话
3 编写代码
package com.star.redis_lock.redislock;
import com.star.redis_lock.config.RedissonUtil;
import org.redisson.Redisson;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class RedisLockController {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private Redisson redisson;
@RequestMapping("/get")
public String shop() {
//String uuidLock = UUID.randomUUID().toString();
String lock = "lock";
String redissonkey = "redissonkey";
RLock lock1 = redisson.getLock(redissonkey);
try {
//不是用redisson
// Boolean mylock = stringRedisTemplate.opsForValue().setIfAbsent("mylock", uuidLock, 3, TimeUnit.SECONDS);
lock1.lock();
int stock = Integer.parseInt(stringRedisTemplate.opsForValue().get(lock));
if (stock > 0) {
int realStock = stock - 1;
stringRedisTemplate.opsForValue().set(lock, realStock + "");
System.out.println("扣减库存成功,现在库存为" + realStock);
} else {
System.out.println("库存不足");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//未使用redis分布式锁 释放锁
/*if (uuidLock.equals(stringRedisTemplate.opsForValue().get("mylock"))) {
stringRedisTemplate.delete("mylock");
}*/
lock1.unlock();
}
return "ok";
}
}
ok简单的秒杀就可以了