最近项目要用redis,依然是基于tp3.2.php
发现thinkphp3.2自带的缓存类并很差使用,就本身封装了一个redis
目前只支持hash格式,其余数据类型的操做后面用到的时候再补充thinkphp
<?php /** * Author:laomiao * Time:2018/07/03 */ namespace Org\Util; /** * redis实现类 * @category ORG * @package ORG * @subpackage Util */ class Redis{ //redis对象 public $redis=null; /** * 构造方法 * 设置初始化redis服务器信息 */ public function __construct(string $ip=null,string $password=null,int $port=null) { $redis = $this->connect($ip,$password,$port); if(is_object($redis)){ $this->redis = $redis; }else{ return false; } } /** * redis链接方法 * @param string $ip 服务器ip * @param string $password 受权密码 * @param string $prot 服务器端口 * @return object $redis 返回redis链接对象 */ private function connect(string $ip=null,string $password=null,int $port=null) { $ip = $ip ?? C("REDIS_HOST"); $password = $password ?? C("REDIS_AUTH"); $port = $port ?? C("REDIS_PORT"); $redis = new \Redis(); $connect= $redis->connect($ip, $port); if($connect){ $redis->auth($password); return $redis; }else{ return "redis服务器链接失败"; } } /** * 增长hash字段值 * @param string $key 哈希的键 * @param string $field 字段名 * @param mixed $value 存储的值 * @return bool */ public function hset(string $key, string $field,$value) { if($key != "" && $field != ""){ if(is_array($value)) $value = json_encode($value); return $this->redis->hset($key,$field,$value); }else{ return false; } } /** * 获取hash的某个key的某个field * @param string $key 某个hash的键名 * @param string $field hash的字段名 * @return mixed */ public function hget(string $key,string $field) { $value = $this->redis->hget($key,$field); if(!$value){ return ""; }else{ if($this->is_json($value)){ return json_decode($value,true); }else{ return $value; } } } /** * 获取hash的某个key的某个field或者多个field * @param string $key 某个hash的键名 * @param string $field hash的字段名 * @return array */ public function hmget(string $key,string ...$fields):array { // dump($fields); t1 t2 $this->key=$key; //经过array_map获取全部的field对应的数据,可是该结果倒是索引形式 $data = array_map(function(string $field){ $list = $this->redis->hget($this->key,$field); if($this->is_json($list)){ $tmp = json_decode($list,true); }else{ $tmp = $list; } return $tmp; },$fields); //遍历上述结果 将field对应到结果上 $result=[]; foreach($data as $key=>$vo){ $result[$fields[$key]] = $vo; } return $result; } /** * 获取hash的某个key的全部field * @param $key 键名 * @return array */ public function hgetall(string $key):array { $key = $key??''; $data = $this->redis->hgetall($key); if(count($data)>1){ foreach($data as $key=>$vo){ if($this->is_json($vo)) $tmp[$key]=json_decode($vo,true); else $tmp[$key] = $vo; } $data=$tmp; } return $data; } /** * 判断哈希某key的某个field是否存在 * @param string $key 键名 * @param string $field 字段名 * @return bool */ public function hexists(string $key,string $field):bool { $result = $this->redis->hexists($key,$field); if($result == 1){ return true; }else{ return false; } } /** * 读取redis中某键的全部key * @param string $key * @return array/bool */ public function hkeys(string $key) { if($key){ $result = $this->redis->hkeys($key); if(count($result)>=1){ return $result; }else{ return false; } }else{ return false; } } /** * 判断哈希中某个键中存储多少个键值 * @param string $key * @return int */ public function hlen(string $key):int { if($key){ return $this->redis->hlen($key); }else{ return false; } } /** * 获取哈希中某键中存储的全部值 * @param string $key * @return array/bool */ public function hvals(string $key) { if($key){ $result = $this->redis->hvals($key); if(count($result)>=1){ return $result; }else{ return false; } }else{ return false; } } /** * 删除hash中某个key中的某些个field * @param string $key * @param string $fields * @return bool */ public function hdel(string $key,string ...$fields):bool { if(!$key) return false; $this->key = $key; array_map(function(string $field){ return $this->redis->hdel($this->key,$field); },$fields); return true; } /** * 判断字符串是不是json格式 * @param string $str 要判断的字符串 */ private function is_json(string $str):bool { json_decode($str); return (json_last_error() == JSON_ERROR_NONE); } }