网上有很多处理并发的例子 但是感觉太麻烦啦 所以凭着自己的感觉写了一个 
测试 1秒 300个请求 是通过的 
欢迎各位大神指点
学习参考 
http://doc.redisfans.com/topic/transaction.html#check-and-set
// 1乐观锁
public function optimisticlock($key){if(!$this->_redis->EXISTS($key)){return false;}$this->_redis->WATCH($key); //监听事务// 库存数量$value =  $this->_redis->get($key);if(!$value){return false;}$value = $value - 1;$this->_redis->MULTI;  //事务开始$resoult=$this->_redis->set($key,$value);$this->_redis->EXEC;  //事务结束return $resoult;
}
 
测试过程
huiting@USER-WangHuiTing:/opt$ http_load -p 300 -s 1 test.txt
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
http://www.yuexing.eihoo.cn/index.php?mod=test&act=optimisticlock: byte count wrong
18764 fetches, 300 max parallel, 3.4125e+06 bytes, in 1.00005 seconds
181.864 mean bytes/connection
18763.1 fetches/sec, 3.41234e+06 bytes/sec
msecs/connect: 0.206676 mean, 2.604 max, 0.032 min
msecs/first-response: 4.53481 mean, 981.273 max, 0.188 min
15 bad byte counts
HTTP response codes:code 200 -- 15code 502 -- 18749
 
第二种方式用列表的方式 list 利用redis 的原子性 lpop 单进程 一个一个排队释放队列里面的元素
1,入库存
 
// 商品库存存redis public function set_stock($stock,$goods_id){   $key = 'seckill'.'_'.$goods_id;   for ($i=0;$i<$stock;$i++){   $this->_redis->lpush($key,1);  }  }

2,出库存

 
//秒杀出库存 public function out_stock($goods_id){   $key = 'seckill'.'_'.$goods_id;  $count = $this->_redis->lpop($key);  if(!$count){  //debug_log_write();  return false;  }   return true; } 

3.锁处理

public function lock($strMutex, $intTimeout, $intMaxTimes = 0) {$objRedis = new \Redis();$objRedis->pconnect($this->my_config['redis_server'], 6379);//使用incr原子型操作加锁$intRet   = $objRedis->incr($strMutex);if ($intRet === 1) {//设置过期时间,防止死任务的出现$objRedis->expire($strMutex, $intTimeout);return true;}if ($intMaxTimes > 0 && $intRet >= $intMaxTimes && $objRedis->ttl($strMutex) === -1) {//当设置了最大加锁次数时,如果尝试加锁次数大于最大加锁次数并且无过期时间则强制解锁$objRedis->del($strMutex);}return false;
}
$bool=$this->lock('lock_edit_userinfo_'.$user_id,1,1);
if($bool==true){$task_mod->adduser_task($user_id, 5, 1, 1, 0);
}

redis 秒杀多并发处理相关推荐

  1. Redis 秒杀案例

    Redis 秒杀案例 文章目录 Redis 秒杀案例 实现 ab工具模拟并发 超卖和超时问题解决 配置JedisPool连接池来解决超时问题 利用乐观锁淘汰用户,解决超卖问题 库存遗留问题解决 什么是 ...

  2. 保姆级redis6全流程学习和redis秒杀全流程

    文章目录 前言 一.redis解决的问题 1.1.1解决session共享问题 1.1.2降低io读操作 1.2.1nosql数据库的特点 1.2.2 NoSQL的适用场景 1.2.3 NoSQL不适 ...

  3. Redis 秒杀实战

    原文链接:https://www.cnblogs.com/chenyanbin/p/13587508.html 已原创授权 为啥写这个微信抢红包项目呢,公司 0202 年 08 月 22 日,公司周年 ...

  4. PHP redis秒杀返回结果,php结合redis实现高并发下的抢购、秒杀功能

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个: 1 高并发对数据库产生的压力 2 竞争状态下如何解决库存的正确减少("超卖"问题) 对于第一个问题,已经很容易想到 ...

  5. redis 秒杀成功 mysql_如何使用Redis实现秒杀

    如何使用Redis实现秒杀 发布时间:2020-07-15 14:33:30 来源:亿速云 阅读:150 作者:Leah 如何使用Redis实现秒杀?很多新手对此不是很清楚,为了帮助大家解决这个难题, ...

  6. 头条Java后台3面(含答案):事务+List集合+慢查询SQL+Redis+秒杀设计

    头条Java一面 1.讲讲jvm运行时数据库区 2.讲讲你知道的垃圾回收算法 3.jvm内存模型jmm 4.内存泄漏与内存溢出的区别 5. select.epoll 的区别?底层的数据结构是什么? 6 ...

  7. Redis秒杀功能设计与实现

    前言 抢购问题不仅是电商类项目中一个重要的业务,也是许多开发人员在进阶过程中绕不开的问题,关于抢购,如果理清了前后的逻辑和里面涉及到的几个关键性的问题,问题就迎刃而解了 抢购中的几个常见问题 如何设计 ...

  8. mysql慢查询面试题_头条Java岗3面入职:事务+慢查询SQL+Redis+秒杀设计面试题等

    一面 1.讲讲jvm运行时数据库区 2.讲讲你知道的垃圾回收算法 3.jvm内存模型jmm 4.内存泄漏与内存溢出的区别 5. select.epool 的区别?底层的数据结构是什么? 6.mysql ...

  9. redis秒杀代码案例

    用redis实现的秒杀代码案例 public class JedisInstance {public synchronized static Jedis getSingleJedis() {Jedis ...

最新文章

  1. 史上最详细版Centos6安装详细教程
  2. NPTL简介 (NATIVE POSIX Thread Library)
  3. UserWarning: Update your `Conv2D`
  4. General-purpose and introductory examples for the scikit.
  5. SAP UI5 的 兼容性规则 Compatibility Rules
  6. python cmp函数未定义_python用plt画图时,cmp设置方法
  7. JEECG社区第六期架构培训班报名
  8. Jsp页面的几种传参方式
  9. 寒武纪“动荡”的 6 周年:CTO 梁军离职,市值蒸发 59 亿,核心技术人才仅剩 3 人
  10. Android Sqlite3数据库操作
  11. 思科2960g端口限速配置
  12. Fix Bug的五个阶段
  13. 事实表 的指标 维度表_数据库-事实表和维度表之间的区别?
  14. CDN (Content Delivery Network 内容分发网络)
  15. LimeSDR系列产品介绍(一):板卡级(Board Level)产品
  16. win10微软图标点击无反应_双击电脑桌面图标没反应,win10双击图标没反应
  17. ImageNet缔造者:让冰冷的机器读懂照片背后的故事
  18. 学计算机应该具备什么能力,学习计算机专业该具备那些能力?
  19. PTA航空公司VIP客户查询c++版——山东科技大学
  20. linux下查看系统配置参数

热门文章

  1. 技术派-IEEE standard for floating-point arithmetic
  2. 定义一个描述三角形的类,名字为Triangle,属性有: private double a, b, c; 方法有: double getPerimeter(),计算三角形的周长 double getA
  3. S7-200SMART案例分析——程序框架
  4. 六界仙尊h5服务器维护多久,六界仙尊H5游戏常见问题说明
  5. Kotlin系列之基础语法
  6. 试验箱的基本参数与循环系统无效缘故
  7. PMP之第一章 引论
  8. 5G NR 基本概念 SCS,RB,CRB,PointA
  9. 职场办公常用的技巧,办公如有神助
  10. html怎么编写化学符号,水的化学符号怎么写