一、说明
利用redis操作的原子性,实现java 多线程并发的情况下实现计数器。
我本机测试多个线程操作之后,结果会出现一定的延迟,但是最终数字是ok的
应该是redis内部做了一个类似于队列的功能。
需要注意的是,得使用redis连接的线程池,不然会出现异常
这里有一个:JedisUtil 下面用到了
二、 代码实现
2.1 redis操作类
package com.hisen.thread.count_click_by_redis;
import com.hisen.utils.JedisUtil;
import redis.clients.jedis.JedisPool;
/**
* @author hisenyuan
* @description 操作redis的线程类
*/
public class ClickRedis {
/**
* 必须使用线程池,而且线程池要大于并发数,否则会出现redis超时
*/
private static JedisPool jedis = JedisUtil.getPool();
public static void click() {
jedis.getResource().incrBy("hisen", 1);
}
public static int getCount() {
return Integer.parseInt(jedis.getResource().get("hisen"));
}