redis watch 加 事务实现秒杀

<?php

//redis watch 加 事务实现秒杀
  
$redis = new redis();  
$result = $redis->connect(‘10.10.10.119‘, 6379);

$redis->watch("mywatchkey"); //必须先watch 后get

$mywatchkey = $redis->get("mywatchkey");
 
$rob_total = 100;   //抢购数量

if($mywatchkey<$rob_total){
      
    $redis->multi();  
      
    //设置延迟,方便测试效果。  
    sleep(5);
    
 //插入抢购数据  
    $redis->hSet("mywatchlist", "user_id_".mt_rand(1, 9999),time());  
    $redis->set("mywatchkey", $mywatchkey+1);  
 
    $rob_result = $redis->exec();
 
    if($rob_result){  
        $mywatchlist = $redis->hGetAll("mywatchlist");  
        echo "抢购成功!<br/>";  
        echo "剩余数量:".($rob_total-$mywatchkey-1)."<br/>";  
        echo "用户列表:<pre>";  
        var_dump($mywatchlist);  
    }else{  
        echo "手气不好,再抢购!";exit;  
    }
 
}

?>

时间: 2024-08-09 02:20:36

redis watch 加 事务实现秒杀的相关文章

Redis教程6--Redis事务

redis对事务的支持目前还比较简单.redis只能保证一个client发起的事务中的命令可以连续的执行,而中间不会插入其他client的命令. 由于redis是单线程来处理所有client的请求的所以做到这点是很容易的.一般情况下redis在接受到一个client发来的命令后会立即处理并 返回处理结果,但是当一个client在一个连接中发出multi命令有,这个连接会进入一个事务上下文,该连接后续的命令并不是立即执行,而是先放到一 个队列中.当从此连接受到exec命令后,redis会顺序的执行

使用redis缓存加索引处理数据库百万级并发

使用redis缓存加索引处理数据库百万级并发 前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据,这里不再细说.我大概的做法是这样的,编码使用多线程访问我的数据库,在访问数据库前先访问redis缓存没有的话在去查询数据库,需要注意的是redis最大连接数最好设置为300,不然会出现很多报错. 贴一下代码吧 1 2 3 4 5 6 7 8 9 10 1

Redis 中的事务

Redis支持简单的事务 Redis与mysql事务的对比 Mysql Redis 开启 start transaction muitl 语句 普通sql 普通命令 失败 rollback 回滚 discard 取消 成功 commit exec 注: rollback与discard 的区别 如果已经成功执行了2条语句, 第3条语句出错. Rollback后,前2条的语句影响消失. Discard只是结束本次事务,前2条语句造成的影响仍然还在 注: 在mutil后面的语句中, 语句出错可能有2

redis学习(5) - 事务

1.redis中的事务是一组命令的集合.一个事务中的命令,要么都执行,要么都不执行 2. MULTI    告诉redis:下面我发给你的命令属于同一个事务,先不要执行,而是把它们暂时存起来 OK SADD "user:1:followers" 2   发送命令 QUEUED                返回QUEUED表示这两条命令已经进入等待执行的事务队列中了 SADD "user:2:followers" 1 QUEUED EXEC            

redis代码解析-事务

redis 的事务相关的几个命令分别为 watch multi exec. watch 可以监控一个变量在事务开始执行之前是否有被修改.使用方式为: WATCH key [key ...] 在redis内部的实现是每个db有一个名为watched_keys的dict,这个dict的key为监控的key,value为所有监控该key的client组成的链表. 所有的涉及到修改数据库的命令执行成功之后都会执行signalModifiedKey->touchWatchedKey,将修改的db中的wat

八、Redis 中的事务

Redis支持简单的事务 Redis与 mysql事务的对比 Mysql Redis 开启 start transaction multi 语句 普通sql 普通命令 失败 rollback 回滚 discard 取消 成功 commit exec 注: rollback与discard 的区别 如果已经成功执行了2条语句, 第3条语句出错. Rollback后,前2条的语句影响消失. Discard只是结束本次事务,前2条语句造成的影响仍然还在 注: 在mutil后面的语句中, 语句出错可能有

Redis篇5-redis事务

概述 官方说明:https://redis.io/topics/transactions redis"部分"支持事务(部分回滚) 关键命令 MULTI 开始事务 EXEC 开始执行事务内命令s DISCARD 取消事务并放弃事务内命令s的执行 WATCH 监视一个或多个key,开始乐观锁CAS的事务操作 UNWATCH 取消所有key监视 从Redis2.2开始支持用于乐观锁的check-and-set (CAS) 开始使用 multi-exec正常提交 mset k1 v1 k2 v

利用redis List队列简单实现秒杀 PHP代码实现

利用redis List队列简单实现秒杀 PHP代码实现 2018年05月28日 11:37:46 m_nanle_xiaobudiu 阅读数 35674更多 分类专栏: Redis 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m_nanle_xiaobudiu/article/details/80479666 一 生产者producer部分 ---------------------

04: redis 消费模式 和 事务 - 扩展slow日志

Redis发布消息模式 生产消费模型 Redis发布消息通常有两种模式: 1:队列模式(queuing) 2:发布-订阅模式(publish-subscribe) 任务队列:顾名思义,就是“传递消息的队列”.与任务队列进行交互的实体有两类,一类是生产者(producer),另一类则是消费者(consumer).生产者将需要处理的任务放入任务队列中,而消费者则不断地从任务独立中读入任务信息并执行. 任务队列的好处: 松耦合. 生产者和消费者只需按照约定的任务描述格式,进行编写代码. 易于扩展. 多