Wetts's blog

Stay Hungry, Stay Foolish.

0%

Redis-RedisAtomicInteger的使用.md

RedisAtomicInteger 从名字上来说就是 redis 的原子 Integer 数据类型,由于其原子性,可用于秒杀活动物品数量的控制。

以及保证顺序生成数字。

下面示例:创建了 100 个线程的线程池子,submit 中的代码相当于在一个线程的 run 方法中持续执行,

外面 for 循环 100 次,就是往线程池提交 100 次任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Autowired
private RedisTemplate redisTemplate;

@RequestMapping("/testRedisAtomicInteger")
@ResponseBody
public Object testRedisAtomicInteger() {

String ticketName = "testRedisAtomicInteger";
RedisAtomicInteger redisCount = new RedisAtomicInteger(ticketName,redisTemplate.getConnectionFactory());

// 创建 100 个线程 并发执行 increment 操作
ExecutorService pool = Executors.newFixedThreadPool(100);
for (int i = 0; i < 100; i++) {
pool.submit(() -> {
// 配额码原子变量值增加,每次增加1
for (int j = 0; j < 100; j++) {
int count = redisCount.incrementAndGet();
System.out.println(Thread.currentThread().getName()+": " +count);
}
});
}
return redisCount;
}