您的位置:首页 > 数据库 > Redis

PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)

2017-10-11 09:47 2935 查看
本文只能参考,切勿偏听偏信!!!

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中数据参考代码:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: