使用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 ( ) ;
}
}