前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用redis 中的事务处理实现商品秒杀

使用redis 中的事务处理实现商品秒杀

作者头像
码缘
发布2019-09-11 20:04:01
6500
发布2019-09-11 20:04:01
举报
文章被收录于专栏:PHP修行之路PHP修行之路

redis中的事务处理:

redis中的事物事物处理是指能够批量的执行一组命令(当事务开始执行时,事务中的命令能够按照按照规定好的顺序执行而不会被插队或打断);

与mysql事务的区别在于:mysql中事务开启后,当某一条语句执行出现错误时该事务会回退到开始时的状态,而redis中的事务却不会这么做!但是redis中可以去指定监测某一个Key值,当该Key值在开始事务后并且执行事务之前发生了变化的话,则该事务会被遗弃,事务中的命令将不会执行。

redis事务中的常用命令:

Multi 命令用于标记一个事务块的开始。事务块内的多条命令会按照先后顺序被放进一个队列当中,最后由 EXEC 命令原子性(atomic)地执行。

Exec 命令用于执行所有事务块内的命令。

Watch 命令用于监视一个(或多个) key ,如果在事务执行之前这个(或这些) key 被其他命令所改动,那么事务将被打断

Unwatch 命令用于取消 WATCH 命令对所有 key 的监视。

Discard 命令用于取消事务,放弃执行事务块内的所有命令。

php中使用 redis处理秒杀:

代码语言:javascript
复制
<?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 "抢购结束";
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-04-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档