• 注册
当前位置:1313e > 数据库 >正文

redis实现秒杀demo

代码

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;}@Overridepublic 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);//提交事务,如果商品数量发生了改动 则会返回nullList 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

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录