一个简单清晰的Redis操作类-php

<?php
/**
 * redis处理的二次封装
 * 
 */
class Redis{

    private $_redis;
    
    private $_config;
    
    public function __construct() {        
        $this->_config = Yaf_Application::app()->getConfig()->get("Redis");
        
        if(empty($this->_config)){
            throw new Exception("email config can not be empty!");
        }
        if ($this->_config['servers']['host'] == '')  {
            $this->_config['servers']['host'] = '127.0.0.1'; 
        } 
        if ($this->_config['servers']['port'] == ''){
            $this->_config['servers']['port'] = '6379';          
        } 
        $this->_redis = new redis();  
        $this->_redis->connect($this->_config['servers']['host'], $this->_config['servers']['port']);  
        //$this->_redis->pconnect($this->_config['servers']['host'], $this->_config['servers']['port']);
        $this->_redis->auth($this->_config['servers']['password']);
    }

    /** 
     * 设置值 
     * @param string $key KEY名称 
     * @param string|array $value 获取得到的数据 
     * @param int $timeOut 时间 
     */  
    public function set($key, $value, $timeOut = 0) {   
        $value = json_encode($value, TRUE);  
        $retRes = $this->_redis->set($key, $value);  
        if ($timeOut > 0) $this->_redis->setTimeout($key, $timeOut);  
        return $retRes;  
    }

    /**
     * 设置db
     * @param int $deIndex db值
     */
    public function select($deIndex) {
        $deIndex = (int)$deIndex;
        $retRes = $this->_redis->select($deIndex);
        return $retRes;
    }

    /**
    * 通过KEY获取数据 
    * @param string $key KEY名称 
    */  
    public function get($key) {  
        $result = $this->_redis->get($key);  
        return json_decode($result, TRUE);  
    }  
    
    /** 
     * 删除一条数据 
     * @param string $key KEY名称 
     */  
    public function delete($key) {  
        return $this->_redis->delete($key);  
    }  
      
    /** 
     * 清空数据 
     */  
    public function flushAll() {  
        return $this->_redis->flushAll();  
    }  

    /** 
     * 数据入队列 
     * @param string $key KEY名称 
     * @param string|array $value 获取得到的数据 
     * @param bool $right 是否从右边开始入 
     */  
    public function push($key, $value ,$right = true) {  
        $value = json_encode($value);  
        return $right ? $this->_redis->rPush($key, $value) : $this->redis->lPush($key, $value);  
    }  
      
    /** 
     * 数据出队列 
     * @param string $key KEY名称 
     * @param bool $left 是否从左边开始出数据 
     */  
    public function pop($key , $left = true) {  
        $val = $left ? $this->_redis->lPop($key) : $this->redis->rPop($key);  
        return json_decode($val);  
    }  

    /** 
     * 数据自增 
     * @param string $key KEY名称 
     */  
    public function increment($key) {  
        return $this->_redis->incr($key);  
    }  
  
    /** 
     * 数据自减 
     * @param string $key KEY名称 
     */  
    public function decrement($key) {  
        return $this->_redis->decr($key);  
    }  

    /**
     * setTranction   
     * 执行事务添加值
     * @param string $key 
     * @param int $count 
     * @access public
     * @return boolean
     */
    public function setTranction($key, $count){
        $this->_redis->watch($key);
        return $this->_redis->multi()->set($key, $count)->exec();
    }

    /**
     * getTranction   
     * 执行事务获取
     * @param string $key 
     * @access public
     * @return boolean
     */
    public function getTranction($key){
        $this->_redis->watch($key);
        return $this->_redis->multi()->get($key)->exec();
    }
    
    /**
     * 指定步长增加
     * @param string $key
     * @param int $count
     * @return int
     */
    public function incrBy($key, $count) {
        return $this->_redis->incrBy($key, $count);
    }
    
    /**
     * 指定步长减少
     * @param string $key
     * @param int $count
     * @return int
     */
    public function decrBy($key, $count) {
        return $this->_redis->decrBy($key, $count);
    }

    /**
     * decrByTranction   
     * 执行事务减去某个值
     * @param string $key 
     * @param int $count 
     * @access public
     * @return array
     */
    public function decrByTranction($key, $count){
        $this->_redis->watch($key);
        return $this->_redis->multi()->decrBy($key, $count)->exec();
    }

    /**
     * incrByTranction 
     * 执行事务,增加某个值 
     * @param string $key 
     * @param int $count 
     * @access public
     * @return array
     */
    public function incrByTranction($key, $count){
        $this->_redis->watch($key);
        return $this->_redis->multi()->incrBy($key, $count)->exec();
    }
        
        /**
     * incrByFloat 
     * 执行事务,增加某个值,float型运算
     * @param string $key 
     * @param int $count 
     * @access public
     * @return array
     */
    public function incrByFloat($key, $count){
        $this->_redis->watch($key);
        return $this->_redis->multi()->incrByFloat($key, $count)->exec();
    }

    /** 
     * key是否存在,存在返回ture 
     * @param string $key KEY名称 
     */  
    public function exists($key) {  
        return $this->_redis->exists($key);  
    }  

    /**
     * setnx 
     * 当没有值时设置一个值
     * @param string $key 
     * @param mixed $value 
     *
     */
    public function setnx($key, $value){
        return $this->_redis->setnx($key, $value);
    }    
    
    /** 
     * 返回redis对象 
     * redis有非常多的操作方法,我们只封装了一部分 
     * 拿着这个对象就可以直接调用redis自身方法 
     */  
    public function redis() {  
        return $this->_redis;  
    }  

}

 

Module层中的使用

  //*实物商品*-----根据商品ID查询商品信息,指定硬条件(是否上架、是否展示、是否删除)-------使用优先
    public static function getProductInfoById($product_id = 0)  
    {
        $data = [];
        if ( !is_positive_integer( $product_id )) {
            return $data;
        }
        $Cache = new Cache;
        $Cache_key = sprintf(self::$Product_Real_Info_Cache_Key, $product_id);
        $data = unserialize($Cache->get_obj_cache( $Cache_key));
        if ($data === false) {
            $productInfo = self::alias('p')
                        ->field('p.id,p.product_sn,p.product_name,p.product_money,p.product_price,p.score,p.product_stock,
                            p.product_image,p.product_param,p.product_desc,p.product_main,p.category_id,p.merchant_id')
                        ->where(['p.id' => $product_id, 'p.is_delete' => 0,'is_virtual' => 0,'is_shelves' => 1])
                        ->find();
            $data = $productInfo ? $productInfo->toArray() : [];
            if (is_not_empty_array($data)) {
                $Cache->cache_item($Cache_key, serialize($data), self::$Cache_time);
            }
        }
         // echo memory_get_usage();
        return $data;
    }

  

posted @ 2017-09-07 15:06  温柔的风  阅读(387)  评论(0编辑  收藏  举报