项目中遇到并发问题和解决办法

最近在做一朋友帮砍价的活动。建立在微信公众号端的一个电商平台,然后我负责砍价模块。

由于这个模块高并发的几率比较大,所有有些逻辑模块就要采取一些缓存技术和排它锁的用户,

比如:由于项目需求是可以多个人同时砍价,我们又有砍到最低价格的限制,所以不进行处理的话很有可能就会超出我们所限制的价格!所以当用户砍价砍到最低价的时候就需要用到排它锁了 ,直接上代码:

//说明砍到最低价
                   $order_price = $res[‘bg_order_price‘]-$res[‘bg_floorprice‘];
                   $file = BASE_DATA_PATH.‘/lock/‘.$res[‘bargain_id‘];
                   $name = $this->deploy[‘prefix‘].‘bargain_‘.$res[‘bargain_id‘];
                   $is_hot = json_decode($this->redis->get($name),true);
                   if($is_hot[‘is_hot‘]==1){  //该活动属于爆款

                       if ($fp = fopen($file, ‘w‘)) {
                           flock($fp, LOCK_EX);//加排它锁锁
                           //执行你的代码
                           $true_number = $this->true_hot_number($res[‘bargain_id‘]);
                           if($true_number < $is_hot[‘bg_store‘]){//判断是否被抢光
                               //没有被抢光写入砍到最低价时间
                               $this->table(‘bargain_order‘)->where(array(‘bg_order_id‘=>$order_id,‘bargain_id‘=>$res[‘bargain_id‘]))->update(array(‘min_time‘=>time()));
                           }
                           flock($fp, LOCK_UN);//解锁
                           fclose($fp);
                       }
                  }

  

时间: 2024-08-29 01:08:45

项目中遇到并发问题和解决办法的相关文章

新建解决方案 在解决方案中添加项目中,解决方案消失的解决办法

新建空白解决方案的步骤:文件--新建项目--其他项目类型--Visual Studio 解决方案 这样就建立出了一个空白解决方案. 然后在资源管理器中可以添加项目,但是添加项目的时候会发现,解决方案消失了,解决办法  工具--选项--项目和解决方案(如果看不到这个,在下方有一个显示所有设置打勾),然后右边有一个 总是显示解决方案.勾上,解决方案就出现了 记录一下. 新建解决方案 在解决方案中添加项目中,解决方案消失的解决办法,布布扣,bubuko.com

项目中遇到的问题及解决办法

1.中文乱码问题 通过编写一个类实现Filter(过滤器)接口,重写里面的方法,并在doFilter这个方法里面设置字符编码为utf-8,通过ServletRequest.setCharacterEncoding("utf-8")来设置:这里之所以用自定义filter(过滤器)来解决这个问题,是因为过滤器在HttpServletRequest到达Servlet之前,会被拦截下来,只有执行过滤器的doFilter方法才会转到下一个链中,注意,需要在web.xml文件中配置信息来创建Fil

Eclipse中项目全部报错----项目全部打红叉的解决办法

今天遇到一个超级郁闷的事情,Eclipse新建的项目全部都打有红叉,我起初以为自 己可能是因为这两天一直在配置NDK开发环境方面的东西,是不是一不小心把那个地方给配置了,然后新建项目时项目都会出现红叉的效果.然后我clean了 一下,遭大糕了,所有的项目都出错了. 打开下面的错误提示: 错误的意思:Debug Certificate 过期了的缘故.百度了一下,果然也有遇到相似的问题,说是牵涉了一个私钥的时间期限问题. 解决办法是:进入:C:\Documents and Settings\Admi

MyEclipse迁移过程中Tomcat版本不一致的解决办法

MyEclipse迁移过程中Tomcat版本不一致的解决办法 下面就是在MyEclipse2013迁移被Tomcat6.0X绑定的项目迁移到MyEclipse2014 Tomcat8.0X,报如下problems那栏的错误: 看见这个迁移过程中Tomcat版本不一致的错误,知道了就比较简单,不知道的时候就比较难了,解决办法如下: 1.查找到MyEclipse里面的菜单栏里面的MyEclipse 2.点击MyEclipse里面的Migrate Projects选项后,就出现如下图: 3.点击上图里

SVN版本冲突中 Files 的值“ &lt; &lt; &lt; &lt; &lt; &lt; &lt; .mine”无效路径中具有非法字符的解决办法

.NET 中 SVN版本冲突中 Files 的值“ < < < < < < < .mine”无效路径中具有非法字符的解决办法: 一. 1.将项目逐个进行编译,会弹出上面的错误,这时候将项目隐藏的文件全部显示,删除 /bin 和 /obj 目录,重新编译,这个时候上面的错误会减少,剩余几个错误,就说明有几个项目的编译出错. 2.继续按照方法一,去编译其他的项目.注意:删除/bin 和 /obj 目录后再编译. 二. 还有一个地方,也会导致这个错误,在项目文件中,就是

cocopods安装使用和安装过程中遇到的问题及解决办法

在osx 10.11之前cocopods问题不多,但是升级到11之后的版本,之前的cocopods大多用不了,需要重新安装,对于我这种使用测试版系统的技术狂来说,每次都需要重新安装很多东西, 当然,cocopods也避免不了安装很多次了. 对于新手来说,使用cocopods开发,还是节省了相当多的开发时间,以下便是cocopods安装和安装过程中遇到的问题及解决办法: 1.cocopods 安装:http://www.cnblogs.com/surge/p/4436360.html 2.出现以下

在vue中使用 layui框架中的form.render()无效解决办法

下面简单介绍在vue中使用 layui框架中的form.render()无效解决办法. 原文地址:小时刻个人技术博客 > http://small.aiweimeng.top/index.php/archives/layuiForm.html 近期开发的项目中前端ui框架用的是Layui,数据渲染使用vue去渲染,当我用vue渲染表单控件的数据时,会出现控件被禁用的情况,例如:select下拉等,于是去看文档,按照文档说的写了,结果然并卵,( ̄▽ ̄)".搞了半天都没搞好.然后在百度搜索了v

linux中无 conio.h的解决办法

conio.h不是C标准库中的头文件,在ISO和POSIX标准中均没有定义.conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等.大部分DOS,Windows,Phar Lap,DOSX,OS/2等平台上的C编译器提供此文件,UNIX和Linux平台的C编译器本身通常不包含此头文件,但已经有其兼容包,可参考: http://conio.sourceforg

GDI+中发生一般性错误的解决办法(转载)

今天在开发.net引用程序中,需要System.Drawing.Image.Save 创建图片,debug的时候程序一切正常,可是发布到IIS后缺提示出现"GDI+中发生一般性错误"的异常.于是开始"摆渡",并寻找到了解决办法:赋予 NETWORK SERVICE 帐户以写权限. 以下为晚上寻找到的资料: 在开发.NET应用中,使用 System.Drawing.Image.Save 方法而导致"GDI+ 中发生一般性错误"的发生,通常有以下三种