文档章节

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

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

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
博文 23
码字总数 5322
作品 0
成都
私信 提问
redis使用watch完成秒杀抢购功能

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

凯文加内特
2015/11/26
989
0
redis_简单秒杀_watch事务

简单秒杀 <?php header("content-type:text/html;charset=utf-8"); $redis = new redis(); $result = $redis->connect('127.0.0.1', 6379); $watchkey = $redis->get("watchkey"); $robtotal......

喵王不瞌睡
2016/03/31
85
0
分别开启15和20个线程模拟秒杀,操作redis事务,商品居然卖不完。。

用 ExecutorService executor = Executors.newFixedThreadPool(15);创建线程池,分别模拟1000个用户去抢100个商品,线程池超过15个之后,商品居然秒杀不完?两个类 测试启动类如下 开启20个线...

S三少S
2018/08/31
0
0
秒杀系统常见问题1

由于最近的面试老是遇到面试官问设计一个秒杀系统,当时也只是粗略的看了看,然后今天去陌陌面试又被问到了,被教育了一顿,然后晚上的笔试又让设计一个秒杀系统,我真是XXXXK,所以搜罗一波...

努力的C
2017/10/17
0
0
如何设计一个秒杀程序及避免超卖问题

很多的电商平台,在节假日如双十一,618等都会有商品描述的活动,今天和大家讨论一下,如何设计一个秒杀系统。 什么是秒杀 在一定的时间内几秒或者几分钟,对一定数量的库存进行出卖。 场景分...

时之令
2018/06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 孤独到都和病毒发生了感情了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# 逃跑计划《一万次悲伤 (Live)》 《一万次悲伤 (Live)》- 逃跑计划 手机党少年们想听歌,请使劲儿戳(这里) 现在...

小小编辑
45分钟前
17
4
test

//// main.c// Test//// Created by 吕颖 on 2019/1/16.// Copyright © 2019年 carmen. All rights reserved.//#include <stdio.h>#include <stdlib.h>#include <t......

carmen-ly
今天
3
0
Android webview热门组件agentweb:4.0.2无法自适应的问题

Android webview热门组件agentweb:4.0.2无法自适应的问题 //设置自适应屏幕,两者合用mAgentWeb.getAgentWebSettings().getWebSettings().setUseWideViewPort(true); //将图片调整到适合w...

Gemini-Lin
今天
5
0
如何维护一个自己的 golang doc 服务

本文内容是如何维护一个golang 在线的doc 服务。 1 什么是godoc ? godoc 是 golang 官方提供的文档生成工具, 2 为什么要有godoc ? 我们经常遇到一个问题,就是代码和文档不一致,线上代码版...

鼎铭
今天
5
0
js中的对象创建的模式以及继承模式

对象创建模式: 工厂模式 构造函数模式 原型模式 继承模式 原型式继承 寄生式继承 构造函数 原型式和构造函数的组合式(缺点:运行两次超类类函数,积累函数的属性被挂载在原型对象上和实例对...

莫西摩西
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部