背景 由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的.为了完成这些异步操作,我们做了一个基于Redis队列任务系统. 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者. 在我们的系统中,主系统作为生产者,任务系统作为消费者. 具体的工作流程如下: 1.主系统将需要需要处理的任务名称+任务参数push到队列中. 2.任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑. 具体代码如下: /** * 启动守…
由于PHP不支持多线程,但是作为一个完善的系统,有很多操作都是需要异步完成的.为了完成这些异步操作,我们做了一个基于Redis队列任务系统. 大家知道,一个消息队列处理系统主要分为两大部分:消费者和生产者. 在我们的系统中,主系统作为生产者,任务系统作为消费者. 具体的工作流程如下: 1.主系统将需要需要处理的任务名称+任务参数push到队列中. 2.任务系统实时的对任务队列进行pop,pop出来一个任务就fork一个子进程,由子进程完成具体的任务逻辑. 具体代码如下: /** * 启动守护进程…
延迟队列,顾名思义它是一种带有延迟功能的消息队列. 那么,是在什么场景下我才需要这样的队列呢? 一.背景 先看看一下业务场景: 1.会员过期前3天发送召回通知 2.订单支付成功后,5分钟后检测下游环节是否都正常,比如用户购买会员后,各种会员状态是否都设置成功 3.如何定期检查处于退款状态的订单是否已经退款成功? 4.实现通知失败,1,3,5,7分钟重复通知,直到对方回复? 通常解决以上问题,最简单直接的办法就是定时去扫表. 扫表存在的问题是: 1.扫表与数据库长时间连接,在数量量大的情况容易出现…
LaravelS LaravelS是一个胶水项目,用于快速集成Swoole到Laravel或Lumen,然后赋予它们更好的性能.更多可能性.Github 特性 内置Http/WebSocket服务器 多端口混合协议 协程 自定义进程 常驻内存 异步的事件监听 异步的任务队列 毫秒级定时任务 平滑Reload 修改代码后自动Reload 同时支持Laravel与Lumen,兼容主流版本 简单,开箱即用 要求 依赖 说明 PHP >= 5.5.9 推荐PHP7+ Swoole >= 1.7.19 …
https://github.com/kcloze/swoole-jobs 一个基于swoole的作业调度组件,已经实现了redis和rabitmq队列消息存储.参考资料:swoole https://wiki.swoole.com/wiki/page/1.html rabitmq https://www.kancloud.cn/yunxifd/rabbitmq/96997 RabbitMQ与Redis队列对比: http://www.cnblogs.com/chinaboard/p/38195…
基于redis实现分布式并发锁(注解实现) 说明 前提, 应用服务是分布式或多服务, 而这些"多"有共同的"redis"; (2017-12-04) 笑哭, 写这篇之前一直觉得应该有大神已经写好了, 但未找到. 其实redis官网已经给出了实现(百度.阿里都是用的这套): Redis分布式锁.Distributed locks with Redis java版本的名字叫redisson, 其github: https://github.com/redisson/re…
最近开始学习无锁编程,和传统的基于Lock的算法相比,无锁编程具有其独特的优点,Angel Lucifer的关于无锁编程一文对此有详细的描述. 无锁编程的目标是在不使用Lock的前提下保证并发过程中共享数据的一致性,其主要的实现基础是CAS操作,也就是 compare_and_swap,通过处理器提供的指令,可以原子地更新共享数据,并同时监测其他线程的干扰,.Net中的对应实现是 InterLocked.CompareExchange函数. 既然不使用Lock,那在无锁编程中要时刻注意的是,代码…
最近开始学习无锁编程,和传统的基于Lock的算法相比,无锁编程具有其独特的优点,Angel Lucifer的关于无锁编程一文对此有详细的描述. 无锁编程的目标是在不使用Lock的前提下保证并发过程中共享数据的一致性,其主要的实现基础是CAS操作,也就是compare_and_swap,通过处理器提供的指令,可以原子地更新共享数据,并同时监测其他线程的干扰,.Net中的对应实现是InterLocked.CompareExchange函数. 既然不使用Lock,那在无锁编程中要时刻注意的是,代码可能…
Delayer 基于 Redis 的延迟消息队列中间件,采用 Golang 开发,支持 PHP.Golang 等多种语言客户端. 参考 有赞延迟队列设计 中的部分设计,优化后实现. 项目链接:https://github.com/mixstart/d... ,有需要的朋友加 Star 哦. 应用场景 订单超过30分钟未支付,自动关闭订单. 订单完成后, 如果用户一直未评价, 5天后自动好评. 会员到期前3天,短信通知续费. 其他针对某个任务,延迟执行功能的需求. 实现原理 客户端:push 任务…
swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送, 设计师公众号中收到派单信息 设计发布者收到派单成功信息 环境 centos6.10 redis-4.0.2 swoole-src-4.4.12 php-7.1.5 MYsyql5.7 在centos6默认是gcc-4.7,安装swoole的时候需要升级到gcc-4.8 二 实现流程 1.开启swoole server端监听 2.开启swoole client连接执行定时执…