@Resource
private RedisConnection<String, String> redisConnection;
@Resource(name = "testPool")
private ExecutorService executorService;
@GetMapping(value = "/test")
public void testRedis() {
// 库存
redisConnection.asyncRedisStringCommands().set("test-redis-incr", "1000");
// 消耗成功的库存(可以替换成Java8的LongAdder)(最优:使用redis的自增)
AtomicInteger successCount = new AtomicInteger();
// 消耗失败的库存
AtomicInteger failerCount = new AtomicInteger();
// 线程记数
AtomicInteger countAll = new AtomicInteger();
for (int i=0; i<5; i++) {
executorService.execute(() -> {
for (int j=0; j<200; j++) {
try {
// 库存剩余
Long count = redisConnection.asyncRedisStringCommands().decr("test-redis-incr").get();
if (count<0) {
throw new Exception();
}
int increment = successCount.getAndIncrement();
redisConnection.asyncRedisStringCommands().set("test-redis-incr-successCount", String.valueOf(increment+1));
System.out.println("j--------------:" + j + "--------------successCount-----------:" + increment);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (Exception e) {
int increment = failerCount.getAndIncrement();
redisConnection.asyncRedisStringCommands().set("test-redis-incr-failerCount", String.valueOf(increment+1));
System.out.println("j--------------:" + j + "--------------failerCount-----------:" + increment);
}
}
int countAllAndIncrement = countAll.getAndIncrement();
if ((countAllAndIncrement+1)==5) {
System.out.println("countAllAndIncrement-----------:" + countAllAndIncrement);
}
});
}
try {
String successCountRedis = redisConnection.asyncRedisStringCommands().get("test-redis-incr-successCount").get();
String failerCountRedis = redisConnection.asyncRedisStringCommands().get("test-redis-incr-failerCount").get();
System.out.println("successCountRedis--------------" + successCountRedis);
System.out.println("failerCountRedis--------------" + failerCountRedis);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return;
}
利用redis,模拟控制库存消耗场景
最新推荐文章于 2023-08-26 16:18:04 发布