redis+zookeeper做商品秒杀

本文介绍了如何结合Redis和Zookeeper构建商品秒杀系统。通过Zookeeper确保线程安全,利用Redis提高数据访问速度和处理高并发,对于大量数据场景,可以利用Redis的分布式缓存能力。已提供初步代码示例。
摘要由CSDN通过智能技术生成

商品秒杀

概述:
用zookeeper的节点来模拟商品数量用zookeeper锁的概念来解决线程安全问题,用Redis来解决数据访问慢,数据量大和刚并发的问题(这里数据如果特别多的话建议使用redis的分布式缓存)

@Controller
public class Fast{

// 商品数量,这里默认是zookeeper的节点来模拟商品
private static int number;
public static int getNumber() {
    return number;
}

public static void setNumber(int number) {
    MiaoSha.number = number;
}

public static ZooKeeper zooKeeper =null;
private static String PATH="/c";
public static  void init() throws Exception{
    //第二个参数代表连接超时的毫秒数
    zooKeeper = new ZooKeeper("192.168.83.131:2181", 100000, new Watcher() {
        //监听的方法  ,一旦有事件发生 ,该方法会自动调用
        public void process(WatchedEvent watchedEvent)  {

        }
    });

}
public static void process(){
    //第二个参数watch 是监听的意思,一旦获取数据的路径的值发生变化 会执行一次监听事件
    Stat stat = new Stat();
    byte[] data = new byte[0];
    try {
        data = zooKeeper.getData(PATH, true, stat);
    } catch (KeeperException e) {
        e.printStackTrace();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("获取到的数据:"+new String(data));
    System.out.println("stat:"+stat);

}

@RequestMapping("/ave")
@ResponseBody
public DefaultMsg shangPin(Integer twe){

    try {
        MiaoSha.init();
      MiaoSha.process();
            //在每次去创建节点的时候就要先把节点全部删除掉
            String path2 = "/c";
            List<String> children2 = zooKeeper.getChildren("/c", false);
            for (String path1 : children2) {
                zooKeeper.delete(path2 + "/" + path1, -1);
            }

        //创建节点
        int v=1;
        for(int b=0;b<twe;b++) {

            v++;
            String create = zooKeeper.create(PATH+PATH+v, "c是一门编程语言".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
           /* System.out.println(create);
            System.out.println(PATH+"b"+v);*/
        }

        /*zooKeeper.setData("/c","100元话费优惠卷".getBytes(),-1);*/
        List<String> children = zooKeeper.getChildren("/c", false);
        System.out.println("获取所有的节点:");
        int i = 0;
        for (String path : children) {
            i++;
            System.out.println(path);
        }
        /*System.out.println(i);*/
        number = i;
        /*System.out.println(number);*/
    }catch (Exception e){
        e.printStackTrace();
    }

    return null;
}
@RequestMapping("/simulation")
@ResponseBody
public Integer shang() throws Exception {
    MiaoSha.init();
    List<String> children = zooKeeper.getChildren("/c", false);
    System.out.println("获取所有的节点:");
    int i = 0;
    for (String path : children) {
        i++;
        System.out.println(path);
    }
    return i;

}

}
具体的后续大家何以先私信我!这里我最近先不更新啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值