java多线程使用redis计数器加减安全代码
时间: 2023-10-24 18:14:14 浏览: 250
可以使用Redis的INCR和DECR命令来实现计数器的加减操作。为了保证多线程安全,可以使用Redis的事务(Transaction)来保证原子性操作。
以下是Java多线程使用Redis计数器加减安全代码的示例:
```java
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;
public class Counter {
private static final String COUNTER_KEY = "my_counter";
public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
// 初始化计数器
jedis.set(COUNTER_KEY, "0");
// 开启多个线程对计数器进行加减操作
for (int i = 0; i < 10; i++) {
new Thread(() -> {
for (int j = 0; j < 1000; j++) {
increment(jedis);
decrement(jedis);
}
}).start();
}
}
private static void increment(Jedis jedis) {
Transaction tx = jedis.multi();
tx.incr(COUNTER_KEY);
tx.exec();
}
private static void decrement(Jedis jedis) {
Transaction tx = jedis.multi();
tx.decr(COUNTER_KEY);
tx.exec();
}
}
```
在上面的代码中,我们使用了Redis的事务来保证INCR和DECR命令的原子性操作。多个线程同时对计数器进行加减操作时,每个线程会开启一个事务,并执行INCR或DECR命令,然后提交事务,从而保证了计数器的正确性。
阅读全文