PHP消息队列实现及应用:流量削峰案列(Redis的List类型实现秒杀)
2017-10-11 09:47
2935 查看
本文只能参考,切勿偏听偏信!!!
Redis中的
可以从头部或者尾部往redis列表里添加元素,这个列表最多可以支持40亿个元素,因此redis在实现一个简单轻量级的消息队列的时候非常有优势。
redis中List类型的具体使用方法:
另外还有下面这些方法:
一个简单的秒杀应该怎么设计:
用户的ID存入
(本案例,就前10个人秒杀成功)
所以列表的长度为10就可以了,10个之后如果再往里追加数据,那么可以直接拒绝请求。
在redis存满10个之后,后面就可以有其他程序来进行取值或其他操作。
代码层设计:
“`
秒杀程序把请求写入Redis(uid、time_stamp);
检查Redis已存放数据的长度,超出上限直接丢弃;
死循环处理已存入Redis的数据并入库。
CREATE TABLE
PRIMARY KEY (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
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(
idint(11) unsigned NOT NULL AUTO_INCREMENT,
uidint(11) unsigned NOT NULL DEFAULT ‘0’,
time_stampvarchar(24) NOT NULL DEFAULT ” COMMENT ‘微秒时间’,
PRIMARY KEY (
id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
我们需要2个程序:1个是把用户请求接收写入到redis中的程序;另外一个是把redis中的数据拿出来,处理存入到mysql数据库的程序。 处理用户请求:
处理redis中数据参考代码:
相关文章推荐
- [置顶] Redis应用3-基于Redis消息队列实现的异步操作
- PHP消息队列实现及应用:消息队列概念介绍
- 高并发关于微博、秒杀抢单等应用场景在PHP环境下结合Redis队列延迟入库
- PHP(Mysql/Redis)消息队列的介绍及应用场景案例
- 【Redis】php+redis实现消息队列
- redis list实现消息队列以及事件模块
- PHP消息队列实现及应用_慕课网学习
- redis中队列消息实现应用解耦的方法
- 消息队列及PHP中的简单实现与应用
- redis之列表类型(list)——队列和栈简单实现
- PHP使用Redis实现消息队列
- redis中list和messageListern实现消息队列的区别
- php+redis消息队列实现抢购功能
- PHP中利用redis实现消息队列处理高并发请求
- php+redis消息队列抢购实现
- php 实现 redis 队列,等待有新消息入列
- PHP基于Redis消息队列实现发布微博的方法
- PHP使用php-resque库配合Redis实现MQ消息队列的教程
- php实现redis消息队列将数据保存到mysql
- Java Jedis操作Redis示例(二)——list 生产者/消费者模式实现消息队列