<?php/*** ------------------------------------------* 统一redis的配置与数据存储规范,便于扩展与修改* # redis通常用于热数据与消息列队等场景* # list内存储array是采用json格式**/class RedisDriver
{protected $redis; // redis对象protected $ip = '127.0.0.1'; // redis服务器ip地址protected $port = '6379'; // redis服务器端口protected $passwd = null; // redis密码public function __construct($config = array()){$this->redis = new Redis();empty($config) or $this->connect($config);}// 连接redis服务器public function connect($config = array()){if (!empty($config)) {$this->ip = $config['ip'];$this->port = $config['port'];if (isset($config['passwd'])) {$this->passwd = $config['passwd'];}}$state = $this->redis->connect($this->ip, $this->port);if ($state == false) {die('redis connect failure');}if (!is_null($this->passwd)) {$this->redis->auth($this->passwd);}}// 设置一条Stringpublic function setStr($key, $text, $expire = null){$key = 'string:' . $key;$this->redis->set($key, $text);if (!is_null($expire)) {$this->redis->setTimeout($key, $expire);}}// 获取一条Stringpublic function getStr($key){$key = 'string:' . $key;$text = $this->redis->get($key);return empty($text) ? null : $text;}// 删除一条Stringpublic function delStr($key){$key = 'string:' . $key;$this->redis->del($key);}// 设置一条Hashpublic function setHash($key, $arr, $expire = null){$key = 'hash:' . $key;$this->redis->hMset($key, $arr);if (!is_null($expire)) {$this->redis->setTimeout($key, $expire);}}// 获取一条Hash,$fields可为字符串或数组public function getHash($key, $fields = null){$key = 'hash:' . $key;if (is_null($fields)) {$arr = $this->redis->hGetAll($key);} else {if (is_array($fields)) {$arr = $this->redis->hmGet($key, $fields);foreach ($arr as $key => $value) {if ($value === false) {unset($arr[$key]);}}} else {$arr = $this->redis->hGet($key, $fields);}}return empty($arr) ? null : (is_array($arr) ? $arr : array($fields => $arr));}// 删除一条Hash,$field为字符串public function delHash($key, $field = null){$key = 'hash:' . $key;if (is_null($field)) {$this->redis->del($key);} else {$this->redis->hDel($key, $field);}}// 在Hash的field内增加一个值 (值之间使用“,”分隔)public function fieldAddVal($key, $field, $val){$arr = $this->getHash($key, $field);if (!is_null($arr)) {$str = reset($arr);$arr = explode(',', $str);foreach ($arr as $v) {if ($v == $val) {return;}}$str .= ",{$val}";$this->setHash($key, array($field => $str));} else {$this->setHash($key, array($field => $val));}}// 在Hash的field内删除一个值public function fieldDelVal($key, $field, $val){$arr = $this->getHash($key, $field);if (!is_null($arr)) {$arr = explode(',', reset($arr));$tmpStr = '';foreach ($arr as $v) {if ($v != $val) {$tmpStr .= ",{$v}";}}if ($tmpStr == '') {$this->delHash($key, $field);} else {$this->setHash($key, array($field => substr($tmpStr, 1)));}}}// 设置表格的一行数据public function setTableRow($table, $id, $arr, $expire = null){$key = '' . $table . ':' . $id;$this->redis->hMset($key, $arr);if (!is_null($expire)) {$this->redis->setTimeout($key, $expire);}}// 获取表格的一行数据,$fields可为字符串或数组public function getTableRow($table, $id, $fields = null){$key = '' . $table . ':' . $id;if (is_null($fields)) {$arr = $this->redis->hGetAll($key);} else {if (is_array($fields)) {$arr = $this->redis->hmGet($key, $fields);foreach ($arr as $key => $value) {if ($value === false) {unset($arr[$key]);}}} else {$arr = $this->redis->hGet($key, $fields);}}return empty($arr) ? null : (is_array($arr) ? $arr : array($fields => $arr));}// 删除表格的一行数据public function delTableRow($table, $id){$key = '' . $table . ':' . $id;$this->redis->del($key);}// 推送一条数据至列表,头部public function pushList($key, $arr){$key = 'list:' . $key;$this->redis->lPush($key, json_encode($arr));}// 从列表拉取一条数据,尾部public function pullList($key, $timeout = 0){$key = 'list:' . $key;if ($timeout > 0) {$val = $this->redis->brPop($key, $timeout); // 该函数返回的是一个数组, 0=key 1=value} else {$val = $this->redis->rPop($key);}$val = is_array($val) && isset($val[1]) ? $val[1] : $val;return empty($val) ? null : $this->objectToArray(json_decode($val));}// 取得列表的数据总条数public function getListSize($key){$key = 'list:' . $key;return $this->redis->lSize($key);}// 删除列表public function delList($key){$key = 'list:' . $key;$this->redis->del($key);}// 使用递归,将stdClass转为arrayprotected function objectToArray($obj){if (is_object($obj)) {$arr = (array) $obj;}if (is_array($obj)) {foreach ($obj as $key => $value) {$arr[$key] = $this->objectToArray($value);}}return !isset($arr) ? $obj : $arr;}}

  

转载于:https://www.cnblogs.com/zc123/p/5889156.html

实用Redis操作类相关推荐

  1. 设计模式之PHP项目应用——单例模式设计Memcache和Redis操作类

    1 单例模式简单介绍 单例模式是一种经常使用的软件设计模式. 在它的核心结构中仅仅包括一个被称为单例类的特殊类. 通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问.从而方便对实例个 ...

  2. php封装redis类,php封装redis操作类

    Redis系列-key相关主要操作函数_数学_自然科学_专业资料.这篇 blog 主要总结下,redis 中跟 key 相关的常用函数 1)keys 语法:keys pattern 解释:查找所有匹配 ...

  3. php5.5n的redis,TP5源码 Redis操作便捷类库

    # TP5源码 Redis操作便捷类库 > app\base\controller\Redis ~~~ /** * Created by PhpStorm. * Power by Mikkle ...

  4. 微服务使用redis操作实例包含redis工具类

    1.单机redis使用工具类 application.properties配置内容 #redis配置 #单机模式 #redis数据库索引,默认为0 spring.redis.database=0 #r ...

  5. Spring Boot + Redis 操作多种实现

    欢迎关注方志朋的博客,回复"666"获面试宝典 一.Jedis,Redisson,Lettuce三者的区别 共同点:都提供了基于Redis操作的Java API,只是封装程度,具体 ...

  6. ecshop的Mysql操作类

    摘要,这是直接摘抄的ecshop的mysql操作类:不过他这里的缓存是用的文件缓存,我们如果想直接使用,可以替换成memcache的或者redis的! <?php/*** ECSHOP MYSQ ...

  7. Redis工具类的封装

    Redis工具类的封装 <dependency><groupId>redis.clients</groupId><artifactId>jedis< ...

  8. 我积累的数据库操作类(ASP.NET)

    http://guanvee.cnblogs.com/archive/2006/06/16/427510.html http://guanvee.cnblogs.com/archive/2006/06 ...

  9. redis-4.0.10集群安装(3台机器,6个node),以及在Spring项目中的集成,redis操作工具类

    1 Redis安装 redis高可用的三种常见的集群方式:redis sentinel .redis cluster(多主机+分布式).redis sharding.接下来主要介绍redis sent ...

最新文章

  1. secureCRT常用设置
  2. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境
  3. 内存中OLTP(Hekaton)的排序警告
  4. 本周六与您相约 | 计算未来轻沙龙:让机器拥有理解语言的能力
  5. mousedown(function(){ return false; })作用
  6. 使用直线标定板进行相机畸变校正,并且进行9点标定(halcon)
  7. 收集53个程序员段子
  8. 【软件测试】黑盒测试の因果图法
  9. 是什么决定了我们以何种方式赚钱?
  10. 使用 Python 多处理库处理 3D 数据
  11. Hbase数据库设计
  12. PHP navicat数据搭建,navicat怎么建表
  13. win查看产品密钥的方法
  14. 服装吊牌如何在条码打印软件中制作?
  15. 洛谷P3354 [IOI2005]Riv 河流 题解
  16. pta 7-2 jmu-python-组合数 (20 分) python函数练习
  17. php问答系统模板,tipask问答系统
  18. 干货|TDD落地:从僵化、优化到固化的过程
  19. mysql-mysql介绍
  20. MATLAB 迷宫游戏

热门文章

  1. ios 键盘的一些问题
  2. LeetCode(892)——三维形体的表面积(JavaScript)
  3. SQL62 出现三次以上相同积分的情况
  4. 为什么现在又流行服务端渲染html?
  5. 我一个月2000多元钱退休工资,可以完成自驾游全国的心愿吗?
  6. 哪一瞬间让你下定决心减肥,并且坚定不移的执行,最终瘦身成功?
  7. 宇宙是什么,有尽头吗,为什么?
  8. “华为”和“荣耀”手机有什么区别?
  9. 白岩松曾说过这样一段话
  10. 赚钱的一大障碍:知道的赚钱门路太多