基于Redis的消息队列封装和测试
来源:互联网 发布:java进程和线程的区别 编辑:程序博客网 时间:2024/05/22 02:34
<?php/** * Created by PhpStorm. * User: huyanping * Date: 14-8-19 * Time: 下午12:10 * * 基于Redis的消息队列封装 */class RedisMessageQueue{ protected $redis_server; protected $server; protected $port; /** * @var 消息队列标志 */ protected $key; /** * 构造队列,创建redis链接 * @param $server_config * @param $key * @param bool $p_connect */ public function __construct($server_config = array('IP' => '127.0.0.1', 'PORT' => '6379'), $key = 'redis_message_queue', $p_connect = false) { if (empty($key)) throw new \Exception('message queue key can not be empty'); $this->server = $server_config['IP']; $this->port = $server_config['PORT']; $this->key = $key; $this->check_environment(); if ($p_connect) { $this->pconnect(); } else { $this->connect(); } } /** * 析构函数,关闭redis链接,使用长连接时,最好主动调用关闭 */ public function __destruct() { $this->close(); } /** * 短连接 */ private function connect() { $this->redis_server = new \Redis(); $this->redis_server->connect($this->server, $this->port); } /** * 长连接 */ public function pconnect() { $this->redis_server = new \Redis(); $this->redis_server->pconnect($this->server, $this->port); } /** * 关闭链接 */ public function close() { $this->redis_server->close(); } /** * 向队列插入一条信息 * @param $message * @return mixed */ public function put($message) { return $this->redis_server->lPush($this->key, $message); } /** * 向队列中插入一串信息 * @param $message * @return mixed */ public function puts(){ $params = func_get_args(); $message_array = array_merge(array($this->key), $params); return call_user_func_array(array($this->redis_server, 'lPush'), $message_array); } /** * 从队列顶部获取一条记录 * @return mixed */ public function get() { return $this->redis_server->lPop($this->key); } /** * 选择数据库,可以用于区分不同队列 * @param $database */ public function select($database) { $this->redis_server->select($database); } /** * 获得队列状态,即目前队列中的消息数量 * @return mixed */ public function size() { return $this->redis_server->lSize($this->key); } /** * 获取某一位置的值,不会删除该位置的值 * @param $pos * @return mixed */ public function view($pos) { return $this->redis_server->lGet($this->key, $pos); } /** * 检查Redis扩展 * @throws Exception */ protected function check_environment() { if (!\extension_loaded('redis')) { throw new \Exception('Redis extension not loaded'); } }/** * 获取key的数组元素 * @params $key */public function getByKey($key){if(empty($key)){$key = $this->key ;}return $this->redis_server ->lRange($key,0,-1);}/** * 清除所有数据 */ public function flushAllData(){return $this->redis_server ->flushAll(); } /** * 测试Lpush */public function lpushData(){return $this->redis_server ->lpush('key','1','2','macbook','man');} }//队列实现原理解析---list 该类型为后进先出 /** 用lpush压入lpop取出元素并在队列中删除该取出的元素*/$redis = new RedisMessageQueue();//$redis->puts(1, 2, 3, 4);//$redis->puts(5, 6, 7, 8, 9);//var_dump($redis->get());//$redis ->flushAllData();//$redis ->lpushData();var_dump($redis->getByKey(''));
感谢:http://blog.csdn.net/huyanping/article/details/39324873#comments
0 0
- 基于Redis的消息队列封装和测试
- 基于redis的消息队列
- 基于Redis的MessageQueue队列封装
- 基于Redis的MessageQueue队列封装
- 基于Redis的MessageQueue队列封装
- 基于Redis的消息队列php-resque
- 基于redis的延迟消息队列设计
- 基于redis的延迟消息队列设计
- 基于redis的延迟消息队列设计
- 基于redis的延迟消息队列设计
- 基于redis构建消息队列
- redis 消息队列性能测试
- 基于System V Message queue的PHP消息队列封装
- redis的消息队列
- redis的消息队列
- redis 的消息队列
- 基于Redis的简单消息队列模块(Node.js)
- SpringBoot 基于Redis快速实现消息队列
- 算法--排序算法的介绍与总结(一)
- pyramid 实现json数据传输时的对象序列化
- WSAStartup详解
- oracle导入导出数据库文件exp、expdp
- C++ 构造函数constructor 与 析构函数destructor 的区别
- 基于Redis的消息队列封装和测试
- NSStringCompareOptions
- Ubuntu上配置静态ip
- 关于struct对齐问题
- java实现在线支付
- 关于webview的若干问题
- 杭电1412({A} + {B})
- 深度技术 + 雨林木风 + 电脑公司 + 萝卜家园 ...
- python实现自顶向下,自底向上