首页 > 数据库 >PHP基于Redis实现延迟队列

PHP基于Redis实现延迟队列

时间:2023-02-28 14:55:23浏览次数:64  
标签:OrderDelayQueue Zset 队列 Redis redis PHP 延迟

PHP基于Redis实现延迟队列

标签(空格分隔): php,redis,linux

解决思路

1. 基于Redis过期key事件
2. 基于Redis Zset特征处理

Redis-Zset

Zset 首先它是一个 set,这保证了内部 value 值的唯一性,其次它给每个 value 添加了一个 score(分值)属性,通过对分值的排序实现了有序化

Zset基本命令

zadd:新增成员
zrem:根据指定key进行删除
zrange:获取成员信息
zrangebyscore:指定分数区间,获取列表
zrevrangebyscore:根据分数区间,倒序展示列表

代码实现 【30分钟后未支付的订单改为已取消】

# 生成数据 推送数据到延迟队列
<?php
    $redis = new \Redis();
$redis->connect("127.0.0.1", "6379");
    $redis->auth("123456");
// 延迟队列名称为  OrderDelayQueue
// 分值为:当前时间戳+30分钟
// 成员为:订单编号
$redis->zAdd("OrderDelayQueue", time() + 30*60, "202302281101988899889");



# 消费数据
<?php
    $redis = new \Redis();
$redis->connect("127.0.0.1", "6379");
    $redis->auth("123456");
while (true) {
    $result = $redis->zRangeByScore('OrderDelayQueue', 0, time(), ['limit' => [0, 1]]);
    if (empty($result)) {
        sleep(1);
        continue;
    }
    $bool = $redis->zRem('OrderDelayQueue', $result[0]);
    if (empty($bool)) {
            sleep(1);
            continue;
        }
        // 自己的业务逻辑
        // 查询订单,修改订单 等等
    }

标签:OrderDelayQueue,Zset,队列,Redis,redis,PHP,延迟
From: https://www.cnblogs.com/yanweifeng/p/17164274.html

相关文章

  • Linux安装PHP8 新版笔记
    PHP部分 官网下载地址:https://www.php.net/downloads.php 我下载的是此时的最新稳定版8.2.3cd/usr/localwgethttps://www.php.net/distributions/php-8.2.3.tar.......
  • laravel phpstorm ide-helper
    composerconfig-grepo.packagistcomposerhttps://mirrors.aliyun.com/composer/composercreate-project--prefer-distlaravel/laravel=6.*haorancomposerrequi......
  • 【web开发基础】PHP快速入门(5)-PHP运算符之算术运算符和字符串运算符详解
    前言PHP开发基础开速入门系列《​【web开发基础】php开发基础快速入门(1)-PHP介绍及开发环境快速安装和基本使用介绍​》《​【web开发基础】php开发基础快速入门(2)......
  • golang实现类似PHP json_encode和json_decode 函数
    类似PHP json_encode和json_decode的用法/*data:=map[string]interface{}{"name":"Tom","age":18,"gender":"male",......
  • spring redis 工具类
    /***springredis工具类**@authorhanzj**///@SuppressWarnings(value={"unchecked","rawtypes"})@ServicepublicclassRedisForLbCache{@Autowiredp......
  • redis的安装
    https://github.com/tporadowski/redis/releases下载地址解压到D:\redis目录,配置环境变量,设置REDIS_HOME值为解压的目录,在path里面引用该HOME,然后在cmd输入redis-cli.exe,......
  • redis实现用户查询次数限制
    随着项目的开发越来越完善,产品也会提出各种层出不穷的需求,当一个复杂列表查询功能实现时,需求又说要增加用户的查询次数限制,这就让开发很是头疼,但是为了RMB也就忍忍了!......
  • 什么是Redis缓存穿透、缓存雪崩、缓存击穿
    缓存穿透缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象......
  • [转]Redis干货 | 五种常用类型之String字符串详解
    一.背景说明小白:伟哥,java中String是最常用类型,Redis中也是吗?伟哥:差不多,我给你稍微讲一下。二.数据类型依据Redis官网,目前Redis数据类型共计九种。具体整理如下:......
  • windows下安装redis7
    一、下载地址:https://github.com/zkteco-home/redis-windows 二、解压到电脑指定目录并注册为服务管理员方式打开cmd,进入到解压到的目录,执行redis-server--service-......