使用inc自增
public class RedisThreadInc {
private static AtomicInteger SUCCESS = new AtomicInteger(1);
private static Random random = new Random();
public static void main(String[] args) {
String redisKey = "product_inc";
Jedis jdeJedis = new Jedis("192.168.81.132",6379);
jdeJedis.auth("password");
String set = jdeJedis.set(redisKey,"1");
jdeJedis.close();
ExecutorService fiExecutorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 100000 ; i++) {
fiExecutorService.submit(()->{
Jedis jRedis = new Jedis("192.168.81.132",6379);
jRedis.auth("password");
String string = jRedis.get(redisKey);
try {
if(Integer.valueOf(string) < 100 ) {
Thread.sleep(300);
Long incr = jRedis.incr(redisKey);
if( incr <= 100 ) {
if(random.nextBoolean()) {
int count = SUCCESS.incrementAndGet();
System.out.println("success:"+count);
}else {
System.out.println("因其他原因失败,将商品加回来");
jRedis.decr(redisKey);
}
}else {
System.out.println("已经为空了");
Thread.sleep(1000);
jRedis.decr(redisKey);
}
}else {
System.out.println("已经为空了");
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
jRedis.close();
});
}
fiExecutorService.shutdown();
}
}
使用队列
public class RedisThreadList {
private static AtomicInteger SUCCESS = new AtomicInteger(1);
private static Random random = new Random();
public static void main(String[] args) {
String redisKey = "product_list";
Jedis jdeJedis = new Jedis("192.168.81.132",6379);
jdeJedis.auth("password");
for (int i = 1; i < 100; i++) {
jdeJedis.rpush(redisKey, "1");
}
jdeJedis.close();
ExecutorService fiExecutorService = Executors.newFixedThreadPool(10);
for (int i = 0; i < 100000 ; i++) {
fiExecutorService.submit(()->{
Jedis jRedis = new Jedis("192.168.81.132",6379);
jRedis.auth("password");
Long llen = jRedis.llen(redisKey);
boolean flag = true;
try {
if(llen > 0 ) {
flag = false;
Thread.sleep(300);
String key = jRedis.lpop(redisKey);
if(key != null) {
if(random.nextBoolean()) {
int count = SUCCESS.incrementAndGet();
System.out.println("success:"+count);
}else {
System.out.println("因其他原因失败,将商品入队列");
jRedis.rpush(redisKey,"1");
}
}else {
flag = true;
}
}
if(flag) {
System.out.println("已经为空了");
Thread.sleep(1000);
}
} catch (Exception e) {
e.printStackTrace();
}
jRedis.close();
});
}
fiExecutorService.shutdown();
}
}