PHP_Redis自定类

    最近在做一个投票系统,原公司的系统实在太冗余了,高并发下,没有Nginx,没有Redis,全靠sql的update,锁了不卡才...

原来也只是零散的使用redis,这回直接把他封装成一个类吧,方便以后使用

   

先分享一下基本redis工具:


1.界面管理工具

2.Window_redis (可以在windows下自己玩玩)

3.Redis官网 (官网查不懂的命令,主要掌握其参数以及返回值,很关键)

4.Redis命令 (备查)

5.Redis相关的小工具:redis-load、redis-stat

redis-load、redis-stat是Redis作者antirez写的两个小工具,其中:

  • redis-load是Redis的一个压力测试工具
  • redis-stat是Redis的状态监控工具
相关代码见: https://github.com/antirez/redis-tools

Redis资料汇总专题

http://blog.nosqlfan.com/html/3537.html



  本文罗列了一些Redis在PHP常用的操作,可能还不是太完整,或者有些待优化的地方,以后慢慢会改进,也是分享给大家。
  1. <?php  
  2.   
  3. /** 
  4.  * Class RedisVote redis操作类,集成了redis常用的操作方法 
  5.  * @time,2016.03.07 
  6.  */  
  7.   
  8. class RedisVote{  
  9.     public $redis_obj = null;//redis实例化时静态变量  
  10.   
  11.     public function __construct($host = '127.0.0.1'$port =6379,$auth = "password") {  
  12.             $this->redis_obj = new Redis();  
  13.             $this->redis_obj->connect($host,$port);  
  14.             $this->redis_obj->auth($auth);  
  15.             return $this->redis_obj;  
  16.     }  
  17.   
  18.     /*------------------------------------start 1.string结构----------------------------------------------------*/  
  19.     /** 
  20.      * 增,设置值  构建一个字符串 
  21.      * @param string $key KEY名称 
  22.      * @param string $value  设置值 
  23.      * @param int $timeOut 时间  0表示无过期时间 
  24.      * @return true【总是返回true】 
  25.      */  
  26.     public function set($key$value$timeOut=0) {  
  27.         $setRes =  $this->redis_obj->set($key$value);  
  28.         if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  29.         return $setRes;  
  30.     }  
  31.   
  32.     /** 
  33.      * 查,获取 某键对应的值,不存在返回false 
  34.      * @param $key ,键值 
  35.      * @return bool|string ,查询成功返回信息,失败返回false 
  36.      */  
  37.     public  function get($key){  
  38.         $setRes =  $this->redis_obj->get($key);//不存在返回false  
  39.         if($setRes === 'false'){  
  40.             return false;  
  41.         }  
  42.         return $setRes;  
  43.     }  
  44.     /*------------------------------------1.end string结构----------------------------------------------------*/  
  45.   
  46.   
  47.   
  48.   
  49.   
  50.     /*------------------------------------2.start list结构----------------------------------------------------*/  
  51.     /** 
  52.      * 增,构建一个列表(先进后去,类似栈) 
  53.      * @param String $key KEY名称 
  54.      * @param string $value 值 
  55.      * @param $timeOut |num  过期时间 
  56.      */  
  57.     public function lpush($key,$value,$timeOut=0){  
  58. //          echo "$key - $value \n";  
  59.         $re = $this->redis_obj->LPUSH($key,$value);  
  60.         if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  61.         return $re;  
  62.     }  
  63.   
  64.     /** 
  65.      * 增,构建一个列表(先进先去,类似队列) 
  66.      * @param string $key KEY名称 
  67.      * @param string $value 值 
  68.      * @param $timeOut |num  过期时间 
  69.      */  
  70.     public function rpush($key,$value,$timeOut=0){  
  71. //          echo "$key - $value \n";  
  72.         $re = $this->redis_obj->RPUSH($key,$value);  
  73.         if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  74.         return $re;  
  75.     }  
  76.   
  77.     /** 
  78.      * 查,获取所有列表数据(从头到尾取) 
  79.      * @param string $key KEY名称 
  80.      * @param int $head  开始 
  81.      * @param int $tail     结束 
  82.      */  
  83.     public function lranges($key,$head,$tail){  
  84.         return $this->redis_obj->lrange($key,$head,$tail);  
  85.     }  
  86.   
  87.     /*------------------------------------2.end list结构----------------------------------------------------*/  
  88.   
  89.   
  90.   
  91.   
  92.   
  93.   
  94.     /*------------------------------------3.start set结构----------------------------------------------------*/  
  95.   
  96.     /** 
  97.      * 增,构建一个集合(无序集合) 
  98.      * @param string $key 集合Y名称 
  99.      * @param string|array $value  值 
  100.      * @param int $timeOut 时间  0表示无过期时间 
  101.      * @return 
  102.      */  
  103.     public function sadd($key,$value,$timeOut = 0){  
  104.         $re = $this->redis_obj->sadd($key,$value);  
  105.         if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  106.         return $re;  
  107.     }  
  108.   
  109.     /** 
  110.      * 查,取集合对应元素 
  111.      * @param string $key 集合名字 
  112.      */  
  113.     public function smembers($key){  
  114.         $re =   $this->redis_obj->exists($key);//存在返回1,不存在返回0  
  115.         if(!$rereturn false;  
  116.         return $this->redis_obj->smembers($key);  
  117.     }  
  118.   
  119.     /*------------------------------------3.end  set结构----------------------------------------------------*/  
  120.   
  121.   
  122.     /*------------------------------------4.start sort set结构----------------------------------------------------*/  
  123.     /* 
  124.      * 增,改,构建一个集合(有序集合),支持批量写入,更新 
  125.      * @param string $key 集合名称 
  126.      * @param array $score_value key为scoll, value为该权的值 
  127.      * @return int 插入操作成功返回插入数量【,更新操作返回0】 
  128.      */  
  129.     public function zadd($key,$score_value,$timeOut =0){  
  130.         if(!is_array($score_value)) return false;  
  131.         $a = 0;//存放插入的数量  
  132.         foreach($score_value as $score=>$value){  
  133.             $re =  $this->redis_obj->zadd($key,$score,$value);//当修改时,可以修改,但不返回更新数量  
  134.             $re && $a+=1;  
  135.             if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  136.         }  
  137.         return $a;  
  138.     }  
  139.   
  140.     /** 
  141.      * 查,有序集合查询,可升序降序,默认从第一条开始,查询一条数据 
  142.      * @param $key ,查询的键值 
  143.      * @param $min ,从第$min条开始 
  144.      * @param $max,查询的条数 
  145.      * @param $order ,asc表示升序排序,desc表示降序排序 
  146.      * @return array|bool 如果成功,返回查询信息,如果失败返回false 
  147.      */  
  148.     public function zrange($key,$min = 0 ,$num = 1,$order = 'desc'){  
  149.         $re =   $this->redis_obj->exists($key);//存在返回1,不存在返回0  
  150.         if(!$rereturn false;//不存在键值  
  151.         if('desc' == strtolower($order)){  
  152.             $re = $this->redis_obj->zrevrange($key,$min ,$min+$num-1);  
  153.         }else{  
  154.             $re = $this->redis_obj->zrange($key,$min ,$min+$num-1);  
  155.         }  
  156.         if(!$rereturn false;//查询的范围值为空  
  157.         return $re;  
  158.     }  
  159.   
  160.     /** 
  161.      * 返回集合key中,成员member的排名 
  162.      * @param $key,键值 
  163.      * @param $member,scroll值 
  164.      * @param $type ,是顺序查找还是逆序 
  165.      * @return bool,键值不存在返回false,存在返回其排名下标 
  166.      */  
  167.     public function zrank($key,$member,$type = 'desc'){  
  168.         $type = strtolower(trim($type));  
  169.         if($type == 'desc'){  
  170.             $re = $this->redis_obj->zrevrank($key,$member);//其中有序集成员按score值递减(从大到小)顺序排列,返回其排位  
  171.         }else{  
  172.             $re = $this->redis_obj->zrank($key,$member);//其中有序集成员按score值递增(从小到大)顺序排列,返回其排位  
  173.         }  
  174.         if(!is_numeric($re)) return false;//不存在键值  
  175.         return $re;  
  176.     }  
  177.   
  178.     /** 
  179.      * 返回名称为key的zset中score >= star且score <= end的所有元素 
  180.      * @param $key 
  181.      * @param $member 
  182.      * @param $star, 
  183.      * @param $end, 
  184.      * @return array 
  185.      */  
  186.     public function zrangbyscore($key,$star,$end){  
  187.         return $this->redis_obj->ZRANGEBYSCORE($key,$star,$end);  
  188.     }  
  189.   
  190.     /** 
  191.      * 返回名称为key的zset中元素member的score 
  192.      * @param $key 
  193.      * @param $member 
  194.      * @return string ,返回查询的member值 
  195.      */  
  196.     function zscore($key,$member){  
  197.         return $this->redis_obj->ZSCORE($key,$member);  
  198.     }  
  199.     /*------------------------------------4.end sort set结构----------------------------------------------------*/  
  200.   
  201.   
  202.   
  203.   
  204.     /*------------------------------------5.hash结构----------------------------------------------------*/  
  205.     /** 
  206.      * 增,以json格式插入数据到缓存,hash类型 
  207.      * @param $redis_key |array , $redis_key['key']数据库的表名称;$redis_key['field'],下标key 
  208.      * @param $token,该活动的token,用于区分标识 
  209.      * @param $id,该活动的ID,用于区分标识 
  210.      * @param $data|array ,要插入的数据, 
  211.      * @param $timeOut ,过期时间,默认为0 
  212.      * @return $number 插入成功返回1【,更新操作返回0】 
  213.      */  
  214.     public function hset_json($redis_key,$token,$id,$data,$timeOut = 0){  
  215.         $redis_table_name = $redis_key['key'].':'.$token;           //key的名称  
  216.         $redis_key_name = $redis_key['field'].':'.$id;              //field的名称,表示第几个活动  
  217.         $redis_info = json_encode($data);                           //field的数据value,以json的形式存储  
  218.         $re = $this->redis_obj -> hSet($redis_table_name,$redis_key_name,$redis_info);//存入缓存  
  219.         if ($timeOut > 0) $this->redis_obj->expire($redis_table_name$timeOut);//设置过期时间  
  220.         return $re;  
  221.     }  
  222.   
  223.     /** 
  224.      * 查,json形式存储的哈希缓存,有值则返回;无值则查询数据库并存入缓存 
  225.      * @param $redis,$redis['key'],$redis['field']分别是hash的表名称和键值 
  226.      * @param $token,$token为公众号 
  227.      * @param $token,$id为活动ID 
  228.      * @return bool|array, 成功返回要查询的信息,失败或不存在返回false 
  229.      */  
  230.     public function hget_json($redis_key,$token,$id){  
  231.         $re =   $this->redis_obj->hexists($redis_key['key'].':'.$token,$redis_key['field'].':'.$id);//返回缓存中该hash类型的field是否存在  
  232.         if($re){  
  233.             $info = $this->redis_obj->hget($redis_key['key'].':'.$token,$redis_key['field'].':'.$id);  
  234.             $info = json_decode($info,true);  
  235.         }else{  
  236.             $info = false;  
  237.         }  
  238.         return $info;  
  239.     }  
  240.   
  241.     /** 
  242.      * 增,普通逻辑的插入hash数据类型的值 
  243.      * @param $key ,键名 
  244.      * @param $data |array 一维数组,要存储的数据 
  245.      * @param $timeOut |num  过期时间 
  246.      * @return $number 返回OK【更新和插入操作都返回ok】 
  247.      */  
  248.     public function hmset($key,$data,$timeOut=0){  
  249.         $re = $this->redis_obj  -> hmset($key,$data);  
  250.         if ($timeOut > 0) $this->redis_obj->expire($key$timeOut);  
  251.         return $re;  
  252.     }  
  253.   
  254.     /** 
  255.      * 查,普通的获取值 
  256.      * @param $key,表示该hash的下标值 
  257.      * @return array 。成功返回查询的数组信息,不存在信息返回false 
  258.      */  
  259.     public function hval($key){  
  260.         $re =   $this->redis_obj->exists($key);//存在返回1,不存在返回0  
  261.         if(!$rereturn false;  
  262.         $vals = $this->redis_obj -> hvals($key);  
  263.         $keys = $this->redis_obj -> hkeys($key);  
  264.         $re = array_combine($keys,$vals);  
  265.         foreach($re as $k=>$v){  
  266.             if(!is_null(json_decode($v))){  
  267.                 $re[$k] = json_decode($v,true);//true表示把json返回成数组  
  268.             }  
  269.         }  
  270.         return $re;  
  271.     }  
  272.   
  273.     /** 
  274.      * 
  275.      * @param $key 
  276.      * @param $filed 
  277.      * @return bool|string 
  278.      */  
  279.     public function hget($key,$filed){  
  280.         $re = $this->redis_obj->hget($key,$filed);  
  281.         if(!$re){  
  282.             return false;  
  283.         }  
  284.         return $re;  
  285.     }  
  286.   
  287.     /*------------------------------------end hash结构----------------------------------------------------*/  
  288.   
  289.   
  290.   
  291.   
  292.     /*------------------------------------其他结构----------------------------------------------------*/  
  293.     /** 
  294.      * 设置自增,自减功能 
  295.      * @param $key ,要改变的键值 
  296.      * @param int $num ,改变的幅度,默认为1 
  297.      * @param string $member ,类型是zset或hash,需要在输入member或filed字段 
  298.      * @param string $type,类型,default为普通增减,还有:zset,hash 
  299.      * @return bool|int 成功返回自增后的scroll整数,失败返回false 
  300.      */  
  301.     public function incre($key,$num = 1,$member = '',$type=''){  
  302.         $num = intval($num);  
  303.         switch(strtolower(trim($type))){  
  304.             case "zset":  
  305.                 $re = $this->redis_obj->zIncrBy($key,$num,$member);//增长权值  
  306.                 break;  
  307.             case "hash":  
  308.                 $re = $this->redis_obj->hincrby($key,$member,$num);//增长hashmap里的值  
  309.                 break;  
  310.             default:  
  311.                 if($num > 0){  
  312.                     $re = $this->redis_obj->incrby($key,$num);//默认增长  
  313.                 }else{  
  314.                     $re = $this->redis_obj->decrBy($key,-$num);//默认增长  
  315.                 }  
  316.                 break;  
  317.         }  
  318.         if($rereturn $re;  
  319.         return false;  
  320.     }  
  321.   
  322.   
  323.     /** 
  324.      * 清除缓存 
  325.      * @param int $type 默认为0,清除当前数据库;1表示清除所有缓存 
  326.      */  
  327.     function flush($type = 0){  
  328.         if($type) {  
  329.             $this->redis_obj->flushAll();//清除所有数据库  
  330.         }else{  
  331.             $this->redis_obj->flushdb();//清除当前数据库  
  332.         }  
  333.     }  
  334.   
  335.     /** 
  336.      * 检验某个键值是否存在 
  337.      * @param $keys ,键值 
  338.      * @param string $type,类型,默认为常规 
  339.      * @param string $field。若为hash类型,输入$field 
  340.      * @return bool 
  341.      */  
  342.     public function exists($keys,$type = '',$field=''){  
  343.         switch(strtolower(trim($type))){  
  344.             case 'hash':  
  345.                 $re = $this->redis_obj->hexists($keys,$field);//有返回1,无返回0  
  346.                 break;  
  347.             default:  
  348.                 $re = $this->redis_obj->exists($keys);  
  349.                 break;  
  350.         }  
  351.         return $re;  
  352.     }  
  353.   
  354.     /** 
  355.      * 删除缓存 
  356.      * @param string|array $key,键值 
  357.      * @param $type,类型,默认为常规,还有hash,zset 
  358.      * @param string $field,hash=>表示$field值,set=>表示value,zset=>表示value值,list类型特殊暂时不加 
  359.      * @return int | ,返回删除的个数 
  360.      */  
  361.     public function delete($key,$type,$field = ''){  
  362.         switch(strtolower(trim($type))){  
  363.             case 'hash':  
  364.                 $re = $this->redis_obj->hDel($key,$field);//返回删除个数  
  365.                 break;  
  366.             case 'set':  
  367.                 $re = $this->redis_obj->sRem($key,$field);//返回删除个数  
  368.                 break;  
  369.             case 'zset':  
  370.                 $re = $this->redis_obj->zDelete($key,$field);//返回删除个数  
  371.                 break;  
  372.             default:  
  373.                 $re = $this->redis_obj->del($key);//返回删除个数  
  374.                 break;  
  375.         }  
  376.         return $re;  
  377.     }  
  378.   
  379.     //日志记录  
  380.     public function logger($log_content,$position = 'user')  
  381.     {  
  382.         $max_size = 1000000;   //声明日志的最大尺寸1000K  
  383.   
  384.         $log_dir = './log';//日志存放根目录  
  385.   
  386.         if(!file_exists($log_dir)) mkdir($log_dir,0777);//如果不存在该文件夹,创建  
  387.   
  388.         if($position == 'user'){  
  389.             $log_filename = "{$log_dir}/User_redis_log.txt";  //日志名称  
  390.         }else{  
  391.             $log_filename = "{$log_dir}/Wap_redis_log.txt";  //日志名称  
  392.         }  
  393.   
  394.         //如果文件存在并且大于了规定的最大尺寸就删除了  
  395.         if(file_exists($log_filename) && (abs(filesize($log_filename)) > $max_size)){  
  396.             unlink($log_filename);  
  397.         }  
  398.   
  399.         //写入日志,内容前加上时间, 后面加上换行, 以追加的方式写入  
  400.         file_put_contents($log_filenamedate('Y-m-d_H:i:s')." ".$log_content."\n", FILE_APPEND);  
  401.     }  
  402.   
  403.   
  404.     function __destruct()  
  405.     {  
  406.         $this->redis_obj->close();  
  407.     }  
  408.   
  409.   
  410. }  
  411.   
  412. ?> 
转自: 博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值