文档章节

简单的redis使用watch完成秒杀抢购功能

 清天君
发布于 2017/02/15 15:28
字数 239
阅读 356
收藏 3

精选30+云产品,助力企业轻松上云!>>>

Redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。

代码1:

<?php  
header("content-type:text/html;charset=utf-8");  
$redis = new redis();  
$result = $redis->connect('10.10.10.119', 6379);  
$mywatchkey = $redis->get("mywatchkey");  
$rob_total = 100;   //抢购数量  
if($mywatchkey<$rob_total){  
    $redis->watch("mywatchkey");  
    $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);  exit;  
    }else{  
        echo "手气不好,再抢购!";exit;  
    }  
}  
?>  

代码2:

<?php
$redis = Redis::getClient();
$key = 'miaosha_key';
$key_r = $redis->decr($key); //最关键
if ($key_r < 0) {

	echo json_encode(['code' => 0, 'msg' => '已经被抢光']);
} else {
	//抢到了
	//队列或者直接保存数据库
	echo json_encode(['code' => 1, 'msg' => '抢到了']);
}
粉丝 0
博文 28
码字总数 6454
作品 0
成都
私信 提问
加载中
请先登录后再评论。
redis使用watch完成秒杀抢购功能(转)

redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。 它的优点如下: 1. 首先选用内存数据库来抢购速度极快...

osc_yewm499n
2019/08/28
1
0
redis使用watch完成秒杀抢购功能:

redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。 它的优点如下: 1. 首先选用内存数据库来抢购速度极快...

osc_savku8xq
2019/12/02
1
0
redis使用watch完成秒杀抢购功能

redis使用watch完成秒杀抢购功能: 使用redis中两个key完成秒杀抢购功能,mywatchkey用于存储抢购数量和mywatchlist用户存储抢购列表。 它的优点如下: 1. 首先选用内存数据库来抢购速度极快...

凯文加内特
2015/11/26
1.2K
0
Java之秒杀活动解决方案

引言   本文主要描述,服务端做相关秒杀活动的时候,对应的解决方案,即高并发下的数据安全。 优化方案 乐观锁思路   Redis中的watch,请求时,通过Redis查询当前抢购数据,如果当前抢购...

osc_kbvhylv9
2019/06/17
2
0
PHP商品秒杀问题解决方案实例详解【mysql与redis】

本文实例讲述了PHP商品秒杀问题解决方案。分享给大家供大家参考,具体如下: 引言 假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量。 if($num > 0){//用户抢购成功,记录用户信息...

osc_8iy2acxd
2019/08/08
4
0

没有更多内容

加载失败,请刷新页面

加载更多

限时免费在线学习考取百度智能云ABC(初级)在线认证证书

本文作者:y****n 百度云智学院致力于为百度ABC战略(人工智能、大数据、云计算)提供人才生态体系建设,包括基于百度ABC、IoT的课程体系,整合百度优势技术能力的深度学习技术、Apollo无人车...

百度开发者中心
昨天
5
0
Maven中dependencyManagement和依赖关系之间的区别

问题: What is the difference between dependencyManagement and dependencies ? dependencyManagement和dependencies什么区别? I have seen the docs at Apache Maven web site. 我已经在......

富含淀粉
今天
7
0
Confluence 如何查看页面 ID

如果你希望查看页面的 ID 你有 2 个方法。 例如,你希望查看 https://www.cwiki.us/display/CONFLUENCEWIKI/Get+started 页面的 Page ID 的话。 如果你的标题栏没有特殊字符,那么将会使用英...

honeymoose
今天
11
0
Linux系统 Centos7 环境基于Docker部署Rocketmq服务

消息队列 基本概述 MQ,Message Queue,基于TCP协议构建的简单协议,区别于具体的通信协议。 基于通信协议定义和抽象的更高层次的通信模型,一般都是生产者和消费者模型,又或者说服务端和客户端...

mazhilin
今天
12
0
我可以在.gitconfig中为自己指定多个用户吗? - Can I specify multiple users for myself in .gitconfig?

问题: In my ~/.gitconfig , I list my personal email address under [user] , since that's what I want to use for Github repos. 在~/.gitconfig ,我在[user]我的个人电子邮件地址,因......

法国红酒甜
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部