不言不语

您现在的位置是: 首页 >  数据库  >  Redis

Redis

实例:快存!抗住高并发,数据队列

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 自定义命令行来实现后台常驻。


文章评论