首页 技术 正文
技术 2022年11月10日
0 收藏 335 点赞 2,307 浏览 1371 个字

代码

package com.prosay.redis;import java.util.List;import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;public class SaleRunable implements Runnable{
String productKey="iphone8";//监视的key 当前秒杀商品的数量
Jedis jedis = new Jedis("localhost");
String userName;
public SaleRunable(String userName){
this.userName = userName;
} @Override
public void run(){
//商品的key , 秒杀有个数量
//watch 监视一个key,当事务执行之前这个key发生了改变,事务会被打断
jedis.watch(productKey);
String value = jedis.get(productKey);
int num = Integer.valueOf(value);
//这次秒杀的商品是100个iphone8
if(num<=100&&num>=1){
//开启事务
Transaction tx = jedis.multi();
//减少一个商品数量
tx.incrBy(productKey, -1);
//提交事务,如果商品数量发生了改动 则会返回null
List<Object> list = tx.exec();
if(list==null || list.size()==0){
System.out.println(userName+"商品抢购失败!");
}else{
for(Object success : list){
System.out.println(userName+"("+success.toString()+")商品抢购成功,当前抢购成功的人数是:"+(1-(num-100)));
}
}
}else{
System.out.println(userName+"商品已经被抢完了");
}
jedis.close();
}}

测试

package com.prosay.redis;import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;import redis.clients.jedis.Jedis;public class TestMs { public static void main(String[] args) {
Jedis jedis = new Jedis("localhost");
jedis.set("iphone8","100");
jedis.close();
//玩多线程
ExecutorService executor = Executors.newFixedThreadPool(20); for(int i = 0 ; i < 1000; i++){
executor.execute(new SaleRunable("user"+i));
}
executor.shutdown(); }}

转自:https://blog.csdn.net/lzh657083979/article/details/77917088

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,084
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,559
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,408
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,181
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,818
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,901