redis处理抢购,并发,防止超卖,提速

1.商品队列(List列表),goods_list           控制并发,防止超卖

2.订单信息(Hash集合),order_info          存放订单信息,后续处理

3.购买成功用户(Set集合),exist_list        set集合唯一性,防止用户重复购买

首先商品入库,存放redis列表

public function ruhuo(){
$redis = new \redis();
$redis->connect('127.0.0.1', 6379);
for ($i = 1; $i <= 1000; $i++) {
$redis->lpush('goods_list', $i);
}
}

抢购

public function 抢购(){
$redis = new \Redis();
$redis->connect('127.0.0.1', 6379); //通过查看 队列的长度来判断,货物是否被抢购完
if($redis->lLen('goods_list')==0){
return '已经卖完';
} //获取用户 id
$user_id=input('post.id'); //通过 集合的唯一性,判读此用户是否已经购买
if($redis->sIsMember('exist_list',$user_id)){
return '你已经购买过了!';
}
//从商品队列删除一个商品,并获取值为商品 id
$goods_id = $redis->rpop('goods_list'); //订单信息
$goods_info = array(
'user_id' =>$user_id,
'goods_id' =>$goods_id,
'time' =>time(),
...
); //订单信息暂存 redis 哈希表,后续处理
$redis->hSet('order_info',$user_id,json_encode($goods_info));
return '购买成功';
}

redis消息队列,tp5.0,高并发,抢购的更多相关文章

  1. java-spring基于redis单机版(redisTemplate)实现的分布式锁+redis消息队列,可用于秒杀,定时器,高并发,抢购

    此教程不涉及整合spring整合redis,可另行查阅资料教程. 代码: RedisLock package com.cashloan.analytics.utils; import org.slf4 ...

  2. PHP+redis消息队列抢购实现

    实现功能: 1. 基于redis队列,防止高并发的超卖 2. 基于mysql的事务加排它锁,防止高并发的超卖 基于redis队列工作流程: 1. 管理员根据goods表中的库存,创建redis商品库存 ...

  3. redis消息队列简单应用

    消息队列出现的原因 随着互联网的高速发展,门户网站.视频直播.电商领域等web应用中,高并发.大数据已经成为基本的标识.淘宝双11.京东618.各种抢购.秒杀活动.以及12306的春运抢票等,他们这些 ...

  4. 预热一下吧《实现Redis消息队列》

    应用场景 为什么要用redis?二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成ja ...

  5. Redis 消息队列的实现

    概述 Redis实现消息队列有两种形式: 广播订阅模式:基于Redis的 Pub/Sub 机制,一旦有客户端往某个key里面 publish一个消息,所有subscribe的客户端都会触发事件 集群订 ...

  6. logstash解耦之redis消息队列

    logstash解耦之redis消息队列 架构图如下: 说明:通过input收集日志消息放入消息队列服务中(redis,MSMQ.Resque.ActiveMQ,RabbitMQ),再通过output ...

  7. 为什么 redis 单线程却能支撑高并发

    redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理 ...

  8. (十一)RabbitMQ消息队列-如何实现高可用

    原文:(十一)RabbitMQ消息队列-如何实现高可用 在前面讲到了RabbitMQ高可用集群的搭建,但是我们知道只是集群的高可用并不能保证应用在使用消息队列时完全没有问题,例如如果应用连接的Rabb ...

  9. 2.redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

    作者:中华石杉 面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候,最基本的 ...

  10. Redis 单线程却能支撑高并发 - 简书 https://www.jianshu.com/p/2d293482f272

    小结: 1.在 I/O 多路复用模型中,最重要的函数调用就是 select,该方法的能够同时监控多个文件描述符的可读可写情况:2.Redis 服务采用 Reactor 的方式来实现文件事件处理器(每一 ...

随机推荐

  1. 生成透视列之for xml path

    临时表#t原始数据: 实现如下格式,即根据Province分组,把每个组对应的City列以某种格式展示: 实现方法: select t.Province,(select city+',' From # ...

  2. netstat、ps、top 、kill 命令备忘

    1.ps命令用于显示当前进程 (process) 的状态. -aux 显示所有包含其他使用者的行程. -e 显示所有进程. -f 全格式输出. 一般带参数 -ef 或者 -aux ,差别不大. 区别: ...

  3. js特殊符号(转)

    HTML有许多特殊的字符,您对此有多少了解?平时在WEB制作中,您又有用到多少?或者说你在平时使用之时,是否也会碰到,有许多特殊字符要如何打印出来?比如说“笑脸”,比如说“版权号”.要是你用时忘记了这 ...

  4. vertx的Actor模型实现

    前言 note: Context 与 EventLoop 关系 : N ; 每次创建一个vericles或者multi instances 通过EventLoopGroup.next挑出一个Event ...

  5. PADS Layout VX.2.3 制作PCB封装(Decal)时,导入DXF文件

    操作系统:Windows 10 x64 工具1:PADS Layout VX.2.3 进入PCB封装编辑器(Decal Editor),点击Drafting Toolbar > Import D ...

  6. centos/redhat命令行上传下载文件

    前言:客户端上没有安装xftp,winscp等等软件,无法将服务器上需要的文件下载到本地去解析,无法将本地的安装包上传到服务器上去,这个时候命令行就可以带你翱翔一波 配置如下: 服务器上: 1.安装需 ...

  7. layui学习

    layui代码生成器 https://9499574.github.io/layui-form-create/ layui界面生成器 http://layuiout.magicalcoder.com/ ...

  8. maven问题解决:提示maven依赖包缺失,但是去文件夹下找确实有这个包

    出现问题:提示maven依赖包缺失,但是去文件夹下找确实有这个包. (我的操作就是:删除文件夹中的jar.重新update,) 搞了好多遍,工具总是提示错误信息,没办法,请求大神 操作大概过程: 1  ...

  9. 【转载】如何直观的理解 O(logn) 时间复杂度的神奇之处

    转自 https://blog.csdn.net/u012814856/article/details/83010082 一.引言最近在极客时间上订阅了<数据结构与算法>的课程,其中王争老 ...

  10. 创建自己的library类库包并使用webpack4.x打包发布到npm

    创建自己的library类库包并使用webpack4.x打包发布到npm 我们在开发过程中,可能经常要使用第三方类库,比如jquery.lodash等.我们通过npm,下载安装完之后,就可以使用了,简 ...