Redis队列 实现消息推送功能
2013-04-03 18:23
806 查看
1.【redi.class.php】Redis基础类库
2.【config_inc.php】服务器配置文件
3.【redis_push.php】入队操作
4.【redis_pop.php】出队操作
5.【pop.sh】出队shell脚本操作
6.【push.log】出队日志文件
空文件push.log
1.执行redis_push.php 入队
2.执行shell脚本让redis_pop.php执行出队 并入日志
<?php /**Redis基类 * @Author ying.hui.xiao@163.com * @Version 1.0 * @Date 2013-03-13 */ class RedisClass{ //存储实例对象write/read private static $redis_server = array(); //防止克隆对象 public function __clone(){ trigger_error('Clone is not allowed!', E_USER_ERROR); } //单利模式 public static function connect($CONFIG){ if(!isset(self::$redis_server[$CONFIG['server']])){ $redis = new Redis; $redis -> connect($CONFIG['server'], $CONFIG['port']); self::$redis_server[$CONFIG['server']] = $redis; } return self::$redis_server[$CONFIG['server']]; } //存储 public function set($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> set(md5($key), $value); } //存储(可设置缓存时间) public function setex($key, $cache_time = 3600, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> setex(md5($key), $cache_time, $value); } //存储(若$key不存在则存储返回TURE,存在不执行返回FALSE) public function setnx($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> setnx(md5($key), $value); } //读取 public function get($key){ global $CONFIG; $redis = self::connect($CONFIG['read']); return $redis -> get(md5($key)); } //删除(一个或一组键值) public function delete($keys){ global $CONFIG; $redis = self::connect($CONFIG['write']); foreach($keys as &$key){ $key = md5($key); } return $redis -> delete($keys); } //List相关操作(处理队列) //在$key的list的左边(头) 添加一个元素 public function lpush($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> lPush(md5($key), $value); } //在$key的list的右边(尾) 添加一个元素 public function rpush($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> rPush(md5($key), $value); } //在$key的list的左边(头) 添加一个元素 如果value已经存在,则不添加 public function lpushx($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> lPushx(md5($key), $value); } //在$key的list的右边(尾) 添加一个元素 如果value已经存在,则不添加 public function rpushx($key, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> rPushx(md5($key), $value); } //在$key的list的左边(头) 添加一个元素 如果value已经存在,则不添加 public function lpop($key){ global $CONFIG; $redis = self::connect($CONFIG['write']); return $redis -> lPop(md5($key)); } //在$key的list的右边(尾) 添加一个元素 如果value已经存在,则不添加 public function rpop($key){ global $CONFIG; $redis = self::connect($CONFIG['write']); return $redis -> rPop(md5($key)); } //获取list列表中索引为index的元素 public function lget($key, $index){ global $CONFIG; $redis = self::connect($CONFIG['read']); return $redis -> lGet(md5($key), $index); } //为list列表中索引为index的元素赋值 public function lset($key, $index, $value){ global $CONFIG; $redis = self::connect($CONFIG['write']); $redis -> lSet(md5($key), $index, $value); } //为list列表中元素个数 public function lsize($key){ global $CONFIG; $redis = self::connect($CONFIG['read']); return $redis->lSize(md5($key)); } }
2.【config_inc.php】服务器配置文件
//Config配置文件 //写服务器 $CONFIG['write']['server'] = '127.0.0.1'; $CONFIG['write']['port'] = 6379; //读服务器 $CONFIG['read']['server'] = '127.0.0.1'; $CONFIG['read']['port'] = 6379;
3.【redis_push.php】入队操作
/**Redis入队操作 * @Author ying.hui.xiao@163.com * @Version 1.0 * @Date 2013-03-13 */ include_once('config_inc.php'); include_once('redis.class.php'); //供数据库操作类中调用 $redis = new RedisClass(); //右侧入队 for($i = 0; $i < 1000; $i ++){ $redis -> rpush('redis_push', 'SID:' . $i); }
4.【redis_pop.php】出队操作
/**Redis出队操作 * @Author ying.hui.xiao@163.com * @Version 1.0 * @Date 2013-03-13 */ include_once('config_inc.php'); include_once('redis.class.php'); //供数据库操作类中调用 $redis = new RedisClass(); //出队操作(使用push.sh执行出队) echo $redis -> lpop('redis_push'); echo '<br />'; echo $redis -> lsize('redis_push');
5.【pop.sh】出队shell脚本操作
#!/bin/bash #执行出队 url="http://localhost/redis/push/redis_pop.php"; CURL=$(which curl) while true do #$CURL $url #$CURL $url >> /usr/local/apache2/htdocs/redis/push/push.log 2>&1 sleep 2 done
6.【push.log】出队日志文件
空文件push.log
1.执行redis_push.php 入队
2.执行shell脚本让redis_pop.php执行出队 并入日志
相关文章推荐
- redis 实现消息队列,秒杀功能实现小测试
- 12.springboot使用redis的订阅功能实现消息队列
- php+redis消息队列实现抢购功能
- 利用Redis 实现消息队列
- Android中使用WebSocket实现群聊和消息推送功能(不使用WebView)
- Redis使用总结(3):实现简单的消息队列
- java redis使用之利用jedis实现redis消息队列
- Redis实现可靠低延时的消息队列
- redis 消息队列发布订阅模式spring boot实现
- 用redis实现支持优先级的消息队列
- [示例] -- redis作为消息队列实现代码
- 转: Redis消息队列的若干实现方式
- nodejs+socketio+redis实现前端消息实时推送
- SpringBoot非官方教程 | 第十四篇:在springboot中用redis实现消息队列
- 【redis】 redis 实现消息队列
- php+redis实现消息队列
- PHP实现的消息实时推送功能【基于反ajax推送】
- Python操作RabbitMQ服务器实现消息队列的路由功能
- 使用java.util.concurrent实现的线程池、消息队列功能
- yii2 redis队列,数据库表锁实现,点赞功能(10s内只可以点一次)