最近项目要用redis,依然是基于tp3.2.

  发现thinkphp3.2自带的缓存类并不好使用,就自己封装了一个

  目前只支持hash格式,其他数据类型的操作后面用到的时候再补充

  

<?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);
}
}

封装一个redis操作类来操作hash格式的更多相关文章

  1. Redis操作Hash工具类封装,Redis工具类封装

    Redis操作Hash工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>> ...

  2. Redis操作字符串工具类封装,Redis工具类封装

    Redis操作字符串工具类封装,Redis工具类封装 >>>>>>>>>>>>>>>>>>& ...

  3. Python_selenium封装一个浏览器引擎类

    Python_selenium封装一个浏览器引擎类 现在我们在编写一个类,叫浏览器引擎类(此例为:启动浏览器),将文件名命名为browser.py,代码下面通过更改一个字符串的值,运用if语句判断和控 ...

  4. redis(Springboot中封装整合redis,java程序如何操作redis的5种基本数据类型)

    平常测试redis操作命令,可能用的是cmd窗口 操作redis,记录一下 java程序操作reids, 操作redis的方法 可以用Jedis ,在springboot 提供了两种 方法操作 Red ...

  5. Python+Selenium中级篇之-封装一个自己的类-浏览器引擎类

    前一篇文章我们知道了,如何去封装几个简单的Selenium方法到我们自定义的类,这次我们编写一个类,叫浏览器引擎类,通过更改一个字符串的值,利用if语句去判断和控制启动那个浏览器.这里我们暂时,支持三 ...

  6. 在Lua中封装一个调试日志(附lua时间格式)

    --自己封装一个Debug调试日志 Debug={} Info={} local function writeMsgToFile(filepath,msg) end function Debug.Lo ...

  7. 封装一个简易版的ajax操作对象

    /** * 发送ajax请求 * @type {Object} * 使用方法如下: * $ajax.request( * method: "post", //请求方式 * url: ...

  8. 分享一个Redis帮助类

    最近在项目中使用了redis来存储已经下载过的URL,项目中用的是ServiceStack来操作Redis,一开始ServiceStack的版本用的是最新的,后来发现ServiceStack已经商业化 ...

  9. block传值以及利用block封装一个网络请求类

    1.block在俩个UIViewController间传值 近期刚学了几招block 的高级使用方法,事实上就是利用block语法在俩个UIViewController之间传值,在这里分享给刚開始学习 ...

随机推荐

  1. 豆瓣上关于<<一万小时天才理论>>一书的一个评论

    原帖地址:http://book.douban.com/review/3707543/ 这本书和其他几本关于一万小时的书一样,都是基于埃里克森和赫伯特.西蒙的“十年法则”的标志性理论,但这本书通过新的 ...

  2. Thinking in work

    Scheduler? Realtime? sure SCI? Power supply and ECU life. how to assure? EMC?

  3. C sharp #001# hello world

    饮水思源:金老师的自学网站 索引 编写一个简单的控制台程序. 日期计算的结构化编程实现 日期计算机面向对象编程实现 直接应用已有组件 1.编写一个简单的控制台程序. using System; usi ...

  4. flutter 读取sdcard权限问题相关

    https://stackoverflow.com/questions/46698751/permission-denied-at-externalstoragedirectory-access-vi ...

  5. ECS上nginx搭建反向代理通过内网访问阿里云OSS服务

    对于付不起钱的小伙计,为了给公司省钱,想尽一切招数.今天就来分享一个使用阿里云OSS存储搭配CDN使用的网站服务器部署方法. 简介 阿里云OSS 阿里云提供的一种文件存储方案,和我们以前接触的百度云B ...

  6. 【Diary】

    [写日记是好习惯] 前记 很随意的日记.想什么写什么,没有限制. 希望以后看到曾经,努力的自己比摸鱼的自己多. 2019.3 2019.3.29 第24次请假打卡 xzh:那些理科男以后都会当IT工作 ...

  7. word模板导出的几种方式:第一种:占位符替换模板导出(只适用于word中含有表格形式的)

    1.占位符替换模板导出(只适用于word中含有表格形式的): /// <summary> /// 使用替换模板进行到处word文件 /// </summary> public ...

  8. 开发过程中 的一些 补充知识点 + 关于mysql中的日期和时间函数?

    参考: https://www.jb51.net/article/23966.htm https://yq.aliyun.com/articles/260389 mysql中的 日期格式是: HHHH ...

  9. Javascript 中的数据类型判断

    (迁移自旧博客2017 09 25) typeof 我们常使用typeof来判断数据类型,在常规场景中足以应付数据类型判断的需要: var obj = { name: 'zhangxiang' }; ...

  10. stm32WB55xx 外设资源

    1.FLASH(闪存) 2.Radio System(无线系统:兼容BLE5.0与IEEE802.15.4标准,由2.4GHz射频前端.BLE和IEEE802.15.4物理层控制器组成,无线低功耗协议 ...