Redis队列 实现消息推送功能

1.【redi.class.php】Redis基础类库

<?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执行出队 并入日志

 

转载于:https://www.cnblogs.com/seanxyh/archive/2013/04/03/2998484.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值