首页 > 数据库 >PHP+Redis消息队列

PHP+Redis消息队列

时间:2023-07-11 09:55:14浏览次数:51  
标签:function return 队列 self Redis handler key PHP public

调用方式

$redis = RedisManager::getInstance();
$queue = json_encode(['queue_id'=>$queueId,'question'=>$question],256);
if($redis->LPush('QA_wecom',$queue)) return Result::Success();

单例

<?php
namespace app\admin\common;
use think\helper\Str;
class RedisManager
{
  private static $handler = null;
  private static $_instance = null;
  private function __construct()
  {
    if (!extension_loaded('redis')) {
      throw new \BadFunctionCallException('未开启Redis扩展');      //判断是否有扩展
    }
    $config = app()->config->get('queue.connections.redis');
    $func = $config['persistent'] ? 'pconnect' : 'connect';
    self::$handler = new \Redis;
    self::$handler->$func($config['host'], $config['port'], $config['timeout']);
    if ('' != $config['password']) {
      self::$handler->auth($config['password']);
    }
    if (0 != $config['select']) {
      self::$handler->select($config['select']);
    }
  }
  /**
   * @return RedisPackage|null 对象
   */
  public static function getInstance()
  {
    if (!(self::$_instance instanceof self)) {
      self::$_instance = new self();
    }
    return self::$_instance;
  }
  /**
   * 禁止外部克隆
   */
  public function __clone()
  {
    trigger_error('Clone is not allow!',E_USER_ERROR);
  }
  /**
   * 写入缓存
   * @param string $key 键名
   * @param string $value 键值
   * @param int $exprie 过期时间 0:永不过期
   * @return bool
   */
  public static function set($key, $value, $exprie = 0)
  {
    if ($exprie == 0) {
      $set = self::$handler->set($key, $value);
    } else {
      $set = self::$handler->setex($key, $exprie, $value);
    }
    return $set;
  }
  /**
   * 读取缓存
   * @param string $key 键值
   * @return mixed
   */
  public static function get($key)
  {
    $fun = is_array($key) ? 'Mget' : 'get';
    return self::$handler->{$fun}($key);
  }
  /**
   * 删除key
   * @param $key
   * @return int
   * @author peter
   * @date 2022-04-09 上午10:39
   */
  public static function delKey($key){
    return self::$handler->del($key);
  }
  /**
   * 获取值长度
   * @param string $key
   * @return int
   */
  public static function lLen($key)
  {
    return self::$handler->lLen($key);
  }
  /**
   * 将一个或多个值插入到列表头部
   * @param $key
   * @param $value
   * @return int
   */
  public static function LPush($key, $value)
  {
    return self::$handler->lPush($key, $value);
  }
  /**
   * 移出并获取列表的第一个元素
   * @param string $key
   * @return string
   */
  public static function lPop($key)
  {
    return self::$handler->lPop($key);
  }
  public static function brPop($queue, $timeout = 0){
    return self::$handler->brPop($queue, $timeout);
  }
  public static function lrange($key,$start,$end){
    return self::$handler->lrange($key,$start,$end);
  }
}

标签:function,return,队列,self,Redis,handler,key,PHP,public
From: https://www.cnblogs.com/douyuanjun/p/17543094.html

相关文章

  • M1 安装redis 报错问题 {assert {[r memory usage key] < 42000}} proc ::test)
    macm1安装redis基本步骤官方下载安装包https://redis.io/download/然后解压 进入目录输入测试命令: sudomaketest没问题进行安装:sudomakeinstall安装成功redis-server启动redis服务redis-cli进行连接,接着按照key,value进行设置测试是否能正常set、get报错......
  • Redis为什么这么快之IO多路复用
    情景复现面试官:Redis为什么这么快?我:1.基于内存2.高效数据结构3.单线程4.IO多路复用面试官:那你讲讲Redis的IO多路复用模型是什么。我:哦,嗯,啊,呀...IO多路复用、文件描述符、用户态,内核态、哦。Redis的IO多路复用模型是什么I/O多路复用模型是什么?就是很多网络连接(多路),......
  • 【数据结构与算法】队列算法题
    TS实现队列interfaceIQueue<T>{//入队enqueue(item:T):void;//出队dequeue():T|undefined;//队首peek():T|undefined;//是否为空isEmpty():boolean;//大小size():number;}classArrayQueue<T>implementsIQueue<T>{......
  • Lamps(STL+双端队列)
     Lamps题面翻译有$n$盏灯,每盏灯有不亮,亮,坏掉3种状态。一开始每盏灯都不亮。第$i$盏灯有属性$a_i,b_i$。每次操作你可以选择一盏灭的灯将其点亮,并得到$b_i$的分数。每次操作结束后,记有$x$盏灯亮着,则所有$a_i\lex$的灯$i$都会损坏(无论是否亮着)。求能得到的最......
  • MQ消息队列
    1、消息队列应用场景消息队列,指保存消息的一个容器,本质是个队列。异步处理,主要目的是减少请求响应时间;应用解耦,使用消息队列后,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系;流量削峰,秒杀活动中,系统峰值流量往往集中于一小段时间,消息队列作为缓冲,可以削弱峰值流......
  • redis学习十七:redis事务
    概念:可以一次执行多个命令,本质是一组命令的集合。一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其他命令插入,不许加塞。1.单独的隔离操作redis的事务仅仅是保证事务里的操作会被连续独占的执行,redis命令执行是单线程架构,在执行完事务内所有指令前是不可能再去......
  • 使用Redis时的vm.overcommit_memory内存分配控制
    最近在使用Redis的时候遇到了linux系统中的vm.overcommit_memory参数设置,对此不是很了解,于是研究了一下,有了本文。 ===================================== 一个尝试,如何在内存中申请空间:>>>100000*400000*8/1024/1024/1024298.0232238769531 实际代码:importnumpyasnpx=np......
  • 【技术积累】数据结构中栈与队列及其相关算法【一】
    什么是栈栈是一种特殊的数据结构,它的各个元素按照一定的次序排列,且只能在表的一端(称为栈顶)进行添加和删除数据,这种数据结构遵循后进先出(LIFO)的原则。栈可以简单地理解为一种容器,它在使用时非常方便,因为只需在顶部压入(push)或弹出(pop)元素即可。栈可以直接使用数组或链表等数据结构......
  • 基于redis的分布式锁
     1为什么要使用分布式锁的理解分布式架构图:例1:在电商业务采用分布式架构后,程序部署在3个tomcat容器中(1个tomcat容器代表一个服务器,3个tomcat可理解在北京上海深圳都有部署电商服务),成员变量A代表商品数量。在北京的Alice,上海的Bob,深圳的Tom,都分别发起了购买或取消iPhone12......
  • Redis 面试要点
    一、Redis主从服务器和集群服务器区别? 1)架构不同:Redis集群采用分布式储存模式,多节点同时提供读写服务,可横向扩展;   而Redis主从只有一个master节点,多个slave节点,只有master节点提供读写服务;2)数据完整性:Redis集群中如果任何一个节点故障,其它节点可以正常提供服务,保......