本文主要是Redisson的一个Demo,Redisson的使用非常简单,三行代码就可以实现。
首先引入依赖,并在springboot启动类中添加配置以及在配置文件中添加配置
Redisson依赖:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.6.5</version>
</dependency>
启动类:
@Value("${config.redis.host}")
private String host;
@Value("${config.redis.port}")
private String port;
@Bean
public Redisson redisson() {
// 此为单机模式
Config config = new Config();
config.useSingleServer().setAddress("redis://"+host+":"+port).setDatabase(0);
return (Redisson) Redisson.create(config);
}
配置文件:
spring:
redis:
host: ${config.redis.host}
port: ${config.redis.port}
config:
redis:
host: 192.168.1.112
port: 6379
编写一个Controller,写一个接口供测试。
Redisson使用步骤就三步,拿锁+上锁+释放
@Autowired
private StringRedisTemplate template;
@Autowired
private Redisson redisson;
@GetMapping("/prod_stock")
public String stock(){
String lock_key = "lock";
RLock lock = redisson.getLock(lock_key);//第一步,获取锁
try {
lock.lock();//第二步,加锁
int stock = Integer.parseInt(template.opsForValue().get("stock"));
if (stock>0) {
template.boundValueOps("stock").increment(-1);
log.info("库存扣减成功,剩余库存:{}",stock - 1);
}else {
log.info("库存扣减失败,库存不足");
}
} finally {
lock.unlock();//第三步,释放锁
}
return "hi";
}
代码编写完成,进入测试
启动两个应用,:
server: port: 8090
server: port: 8080
启动Redis./bin/redis-server ./etc/redis.conf
并添加一个key,set stock 100
做下负载均衡,并启动Nginx./sbin/nginx。
upstream redislock{
server 192.168.1.101:8080;
server 192.168.1.101:8090;
}
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
proxy_pass http://redislock;
}
location /favicon.ico{
return 200;
用Jmeter进行测试即可看到结果
2021-08-13 14:51:27.276 INFO 1608 --- [io-8090-exec-37] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:13
2021-08-13 14:51:27.281 INFO 1608 --- [io-8090-exec-12] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:12
2021-08-13 14:51:27.285 INFO 1608 --- [io-8090-exec-38] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:11
2021-08-13 14:51:27.297 INFO 1608 --- [io-8090-exec-38] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:9
2021-08-13 14:51:27.308 INFO 1608 --- [io-8090-exec-12] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:7
2021-08-13 14:51:27.317 INFO 1608 --- [io-8090-exec-35] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:6
2021-08-13 14:51:27.336 INFO 1608 --- [io-8090-exec-39] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:2
2021-08-13 14:51:27.340 INFO 1608 --- [io-8090-exec-11] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:1
2021-08-13 14:51:27.346 INFO 1608 --- [io-8090-exec-35] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:0
2021-08-13 14:51:27.353 INFO 1608 --- [io-8090-exec-39] c.w.redis.controller.IndexController : 库存扣减失败,库存不足
2021-08-13 14:51:27.267 INFO 7556 --- [io-8080-exec-31] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:15
2021-08-13 14:51:27.271 INFO 7556 --- [io-8080-exec-26] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:14
2021-08-13 14:51:27.292 INFO 7556 --- [io-8080-exec-31] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:10
2021-08-13 14:51:27.301 INFO 7556 --- [io-8080-exec-26] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:8
2021-08-13 14:51:27.323 INFO 7556 --- [io-8080-exec-35] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:5
2021-08-13 14:51:27.327 INFO 7556 --- [io-8080-exec-19] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:4
2021-08-13 14:51:27.331 INFO 7556 --- [io-8080-exec-26] c.w.redis.controller.IndexController : 库存扣减成功,剩余库存:3
2021-08-13 14:51:27.349 INFO 7556 --- [nio-8080-exec-6] c.w.redis.controller.IndexController : 库存扣减失败,库存不足






网友评论