-
啊啊啊顶顶顶
查看全部 -
创建数据库表:
一、接收用户请求存入到redis的程序
二、将redis的数据插入到数据库的程序
查看全部 -
秒杀:在同一时间会有巨大的访问量。
Redis基于内存,速度较快,Mysql数据库则需要在硬盘中写入数据,速度慢。
另外,数据库如果阻塞其他的业务也将受到影响。
Redis是数据可持久化的,会周期性的将数据写入硬盘。不用担心断电。
Redis提供五种数据类型:字符串、双向链表、哈希表、集合、有序集合。
list类型是一个双向链表,支持头部和尾部插入元素。最多可支持40亿个元素。
处理简单轻量的消息队列时非常有优势。
查看全部 -
yum install php-bcmath php-mbstring php-0dom php-curl
查看全部 -
<?php inlcude_onceA './include/db.php'; $redis = new Redis(); $resid->connect('127.0.0.1', 6379); $reds_name = 'miaosha'; $db = DB::getInstance(); //死循环 while(1) { //从队列最左侧取出一个值来 $user = $redis->lPop($redis_name); //然后判断这个值是否存在 if (!$user || $user == 'nil') { sleep(2); continue; } //切割出时间, uid $user_arr = explode('%', $user); $insert_data = array( 'uid' => $user_arr[0], 'time_stamp' => $use_arr[1]] ); //保存到数据库中 $res = $db->insert('redis_queue', $insert_data);: //数据库插入失败时回滚 if (!$res) { $redis->rPop($redis_name, $user); } } //释放redis $redis->close(); }
查看全部 -
</php //首先,加载一个Reids组件, $redis = new Redis(); $resid->connect('127.0.0.1', 6379); $reds_name = 'miaosha'; for ($i = 0;$i < 100;$i++) { $uid = rand(1000000, 9999999); } //接收用户的id, //$uid = $_GET['uid']; //获取redis里面已有的数量 $num = 10; //如果当前人数少于10的时候,则加入这个队列 if ($redis->lLen($resid_name) < 10) { $redis->rPush($redis_name . $uid . '%' . microtime()); echo $uid . '秒杀成功'; }else{ //如果当前人数已经达到10人,责任返回秒杀已完成 echo '秒杀已结束'; } $redis->close();
查看全部 -
整体流程:接受用户订单,通过crontab进行配送处理
弊端:如果用户量大,会导致配送时间紊乱(个人观点)
查看全部 -
消息队列的应用场景
冗余
解耦
流量削峰
异步通信
扩展性
排序保证
查看全部 -
RabbitMQ的官网是www.rabbitmq.com
查看全部 -
代码级设计
秒杀程序把请求写入Redis.(Uid, time_stamp)
检查Redis已存放数据的长度,超出上限直接丢弃
死循环处理存入Redis的数据并入库
查看全部 -
程序流程图
查看全部 -
队列介质:
Mysql:可靠性高、易实现,速度慢
Redis:速度快,单条大消息包时效率低
消息系统:专业性强、可靠,学习成本高
查看全部 -
消息处理触发机制:
死循环读取:易实现,故障时无法及时恢复
定时任务:压力均分,有处理量上限
守护进程:类似php-fpm php-cg,需要shell基础
查看全部 -
MQ应用场景:
冗余、解耦、流量削峰、异步通信、扩展性、排序保证
查看全部 -
消息队列核心结构:
业务系统-入队->消息队列-出队->队列处理系统
应用场景:
数据冗余
解耦:(入队系统,出队系统相互独立,互不干涉。)
查看全部
举报