实例:快存!抗住高并发,数据队列
2022-05-28Redis
通过 Redis 建立数据队列常见的有两种方法,一是Redis 本身自带订阅消息队列模型,二是使用 Redis 的 list 数据结构。本文使用 list 数据结构来演示 Redis 数据队列功能。
本文使用 list 数据结构来演示 Redis 数据队列功能。如果复杂的项目中还是更推荐使用 RabbitMQ 来作为数据队列。因为 RabbitMQ 提供的数据队列更完善,比如离线客户端离线,服务器端会保留队列内容,等客户端上线后继续处理。
将创建订单所需数据写入 Redis,避免高并发创建订单给 MySQL 带来压力。
写入队列代码片段
$redis = new \Redis();$redis->connect('127.0.0.1', 6379);$orders = serialize(['user_id' => 1, 'goods_id' => 1]);$redis->lPush('ordersLists', $orders);
读取队列
异步运行读取队列
代码片段
$redis = new \Redis();$redis->connect('127.0.0.1', 6379);while (true) { $orders = unserialize($redis->rPop('ordersLists')); // 写入数据库 // ============== // do somthing // ============== if ($redis->lLen('ordersLists') == 0) { sleep(1); }}
读取队列代码片段可以使用 Swoole 来运行,如果读取队列代码片段不涉及到多进程/多线程操作,建议使用 ThinkPHP5 自定义命令行来实现后台常驻。
很赞哦! ()