求redis任务队列的操作文档或demo业务类似:抢购,先到先得,先进先出
并发大的抢购需要考虑(欢迎补充大家互相学习)
根据抢购的推广力度评估的最高并发量
服务器架构能扛的量 - 从负载均衡层(lvs),应用层(php),数据层(DB),缓存层(redis)
压测不断优化代码,减少加载不必要的文件
以下是简单的入队列,生产队列 消费队列代码
/** * [pushQueue push queue] * @param {[string]} $queue_key * @param {[array]} $data * @return {[int]} */ function pushQueue($queue_key,$data) { $lock_key = 'pushQueue'.$this->account; // 上锁, 防请求并发 if ( lock($lock_key, 15)) { // 操作频繁 常量自行定义 return OPERATION_LIMIT; } // 生产队列 $result_push = $this->redis->lpush($queue_key, json_encode($data)); // 加入失败 if ( false === $result_push) { // 释放锁 release($lock_key); return SYSTEM_ERROR; } retturn SUCCESS; } /** * Lock to prevent concurrent. * @param string $key * @param int $expire_time * @return Boolean */ public function lock($key = '', $expire_time = 15) { return ''===$key ? false : $this->redis->set($key, 1, array("NX", "EX"=>$expire_time)); } /** * Release lock * @param string $key * @return Boolean */ public function release($key = '') { return ''===$key ? false : $this->redis->del($key); } /** * daemon.php 后台消费队列进程文件() * =============================== */ // 只能在命令行中运行 "cli"==PHP_SAPI OR exit; // 脚本超时设置为无限 set_time_limit(0); // Socket超时设置为无限 ini_set("default_socket_timeout", -1); // 获取用户数据, (并备份数据到mysql) $block_expire_time = 0; # 设置阻塞等待时间为永久 while ( true ) { $json_data = $this->redis->brpoplpush($queue_key = 'queue_key', $backup_key = 'queue_key_backup', $block_expire_time); // 进队列时数据格式转化 $data_arr = json_decode($json_data, true); // 将数据入数据库持久化 }
demo这个例子比较简单用Flask做的,不知道符不符合你的需求。
redis中国这个上面有更加完整的教程。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
并发大的抢购需要考虑(欢迎补充大家互相学习)
根据抢购的推广力度评估的最高并发量
服务器架构能扛的量 - 从负载均衡层(lvs),应用层(php),数据层(DB),缓存层(redis)
压测不断优化代码,减少加载不必要的文件
以下是简单的入队列,生产队列 消费队列代码
demo
这个例子比较简单
用Flask做的,不知道符不符合你的需求。
redis中国
这个上面有更加完整的教程。