使用redis 中的事务处理实现商品秒杀
2019-04-26 08:22:51来源:博客园 阅读 ()
redis中的事务处理:
redis中的事物事物处理是指能够批量的执行一组命令(当事务开始执行时,事务中的命令能够按照按照规定好的顺序执行而不会被插队或打断);
与mysql事务的区别在于:mysql中事务开启后,当某一条语句执行出现错误时该事务会回退到开始时的状态,而redis中的事务却不会这么做!但是redis中可以去指定监测某一个Key值,当该Key值在开始事务后并且执行事务之前发生了变化的话,则该事务会被遗弃,事务中的命令将不会执行。
redis事务中的常用命令:
Multi 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。
Exec 命令用于执行所有事务块内的命令。
Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断
Unwatch 命令用于取消 WATCH 命令对所有 key 的监视。
Discard 命令用于取消事务,放弃执行事务块内的所有命令。
php中使用 redis处理秒杀:
<?php /** * shop_sell_num 存储已经出售商品数量 * shop_total 商品总数 * shop_users_list 请购成功的用户信息 */ $shop_total = 100; $redis = new redis(); $result = $redis->connect('127.0.0.1',6379); if(!$result){ throw new Exception('redis连接失败'); } //监视 shop_sell_num $redis->watch('shop_sell_num'); $shop_sell_num = $redis->get('shop_sell_num'); //判断商品是否剩余 if($shop_sell_num < $shop_total){ $redis->multi(); $redis->set('shop_sell_num',$shop_sell_num+1); $multi_result = $redis->exec(); if($multi_result){ //将用户表示放入已购用户集合中 $redis->sAdd('shop_users_list','用户信息'); }else{ return "抢购失败" } }else{ return "抢购结束"; }
原文链接:https://www.cnblogs.com/itsuibi/p/10769737.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 详解php中的implements 使用 2020-03-18
- PHP简单留言本功能实现代码 2020-03-13
- php 中的closure用法详解 2020-03-13
- PHP中APC缓存配置及使用详解 2020-03-04
- ThinkPHP分页类使用详解 2020-02-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash