zoukankan      html  css  js  c++  java
  • 处理产品超卖的一种思路(来讨论讨论)

    阻止并发下的产品超卖思路是利用redis串行处理数据,但又有高并发处理数据的能力

    产品表(product) 

    class Product

    {

      public int Id{get;set} //自增Id

           public string Name{get;set}//产品名称

           public int Number{get;set}//库存

           public DateTime NTime{get;set;}//库存同步时间

           ....

    }

    库存变更记录表(productNumberRecord)

    class productNumberRecord

    {

      public int Id{get;set;}

           public int Number{get;set;} //本次消耗库存数量

           public int SurplusNumber{get;set} //本次消耗后的剩余数量

           public DataTime Time{get;set;} //记录时间

           ....

    }

    1.将产品Id,库存存入redis,每次操作产品库存,则产生一条库存的变更记录存入sql库中

    2.此时sql库产品的实际库存应该是 库存=库存-库存记录(大于NTime时间的记录)

    3.sql库中的余额,可以做定时任务 按天或小时数进行同步,防止过大的记录造成select超时

    4.如果redis挂掉,那么它将从数据库中 按照步揍2的方式同步库存

    伪代码实现(不加锁)

    (开始事务){

    try{

    func1(插入变更记录表);
    如果func1 执行失败 直接跳出

    func3 ...

    func4 ...

    等其他业务

    funcX(增减redis库存)
    如果funcX执行失败,直接跳出,不插入日志

    如果都成功 则提交事务

    catch{
    tran.callback()//事务回滚
    }

    努力、努力、加油!
  • 相关阅读:
    git分支合并
    php错误处理
    php面试全套
    php面试的那些“黑话”
    快速在命令窗口打开当前路径
    @Autowired注解的使用方法
    jsp页面获取表单的值
    jsp打印九九乘法表
    Google hack
    java中的集合collection
  • 原文地址:https://www.cnblogs.com/yunfan404/p/9418706.html
Copyright © 2011-2022 走看看