PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)
来源:互联网 发布:淘宝卖家中心客服电话 编辑:程序博客网 时间:2024/06/05 17:57
本文只能参考,切勿偏听偏信!!!
Redis中的List类型
是双向链表结构,简单理解就是队列。 支持反向查找和遍历。
可以从头部或者尾部往redis列表里添加元素,这个列表最多可以支持40亿个元素,因此redis在实现一个简单轻量级的消息队列的时候非常有优势。
redis中List类型的具体使用方法:
另外还有下面这些方法:
ltrim:保留指定区间内的元素llen:获取列表长度lset:通过索引设置列表元素的值lindex:通过索引获取列表中元素的值lrange:获取列表指定范围内的元素
一个简单的秒杀应该怎么设计:
秒杀业务程序
:记录是哪一个用户参与了秒杀,时间。
用户的ID存入Redis
的链表里面,进行排队。
(本案例,就前10个人秒杀成功)
所以列表的长度为10就可以了,10个之后如果再往里追加数据,那么可以直接拒绝请求。
在redis存满10个之后,后面就可以有其他程序来进行取值或其他操作。
入库程序
可以遍历redis里的值,然后保存到mysql中。(这个过程可以是循环扫描)
代码层设计:
“`
秒杀程序把请求写入Redis(uid、time_stamp);
检查Redis已存放数据的长度,超出上限直接丢弃;
死循环处理已存入Redis的数据并入库。
数据库设计:
CREATE TABLE redis_queue
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
uid
int(11) unsigned NOT NULL DEFAULT ‘0’,
time_stamp
varchar(24) NOT NULL DEFAULT ” COMMENT ‘微秒时间’,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我们需要2个程序:1个是把用户请求接收写入到redis中的程序;另外一个是把redis中的数据拿出来,处理存入到mysql数据库的程序。处理用户请求:
处理redis中数据参考代码:
- PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)
- redis 实现消息队列,秒杀功能实现小测试
- PHP消息队列实现及应用:消息队列概念介绍
- php+redis实现消息队列
- 基于PHP+redis的秒杀实现
- redis消息队列的实现
- 消息队列及PHP中的简单实现与应用
- 使用Redis+php-resque实现消息队列
- Redis PHP Set集合实现消息队列
- Redis PHP Set集合实现消息队列
- php+redis消息队列抢购实现
- Qt应用Redis实现消息队列
- Redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- redis实现消息队列
- Redis实现消息队列
- redis实现消息队列
- 安装JDK8和JDK9,jemter无法正常启动
- Spring JdbcTemplate
- C++存储类型
- 16 反连接(anti-join)--优化主题系列
- 用单链表实现学生管理
- PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)
- 为什么磁盘慢会导致Linux负载飙升? 【转】
- switch语句穿透问题
- framework添加res资源并打包进新的Android.jar
- python+web.py 搭建微信公众平台(1)
- MySQL 数据库的安装和Navicat的安装
- Java面向对象-匿名内部类
- mybatis 集成mybaties-generator 插件自动生成pojo
- IDC:2017年大数据和业务分析收入将突破1508亿美元