您的位置:威尼斯官方网站 > 威尼斯正规官网 > } //此次消耗仓库储存数据

} //此次消耗仓库储存数据

发布时间:2019-11-21 16:17编辑:威尼斯正规官网浏览(134)

    阻止并发下的产品超卖思路是利用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()//事务回滚
    }

     

    本文由威尼斯官方网站发布于威尼斯正规官网,转载请注明出处:} //此次消耗仓库储存数据

    关键词:

上一篇:没有了

下一篇:之前研究过c