php实现的redis缓存类定义与使用方法示例


Posted in PHP onAugust 09, 2017

本文实例讲述了php实现的redis缓存类定义与使用方法。分享给大家供大家参考,具体如下:

php+redis缓存类

<?php
class redisCache {
  /**
  * $host : redis服务器ip
  * $port : redis服务器端口
  * $lifetime : 缓存文件有效期,单位为秒
  * $cacheid : 缓存文件路径,包含文件名
  */
  private $host;
  private $port;
  private $lifetime;
  private $cacheid;
  private $data;
  public $redis;
  /**
  * 析构函数,检查缓存目录是否有效,默认赋值
  */
  function __construct($lifetime=1800) {
    //配置
    $this->host = "127.0.0.1";
    $this->port = "6379";
    $redis = new Redis();
    $redis->pconnect($this->host,$this->port);
    $this->redis=$redis;
    $this->cacheid = $this->getcacheid();
    $this->lifetime = $lifetime;
    $this->data=$redis->hMGet($this->cacheid, array('content','creattime'));
    //print_r($this->redis);
    //print_r($this->data);
  }
  /**
  * 检查缓存是否有效
  */
  private function isvalid(){
    $data=$this->data;
    if (!$data['content']) return false;
    if (time() - $data['creattime'] > $this->lifetime) return false;
    return true;
  }
  /**
  * 写入缓存
  * $mode == 0 , 以浏览器缓存的方式取得页面内容
  */
  public function write($mode=0,$content='') {
    switch ($mode) {
      case 0:
        $content = ob_get_contents();
        break;
      default:
        break;
    }
    ob_end_flush();
    try {
      $this->redis->hMset($this->cacheid, array('content'=>$content,'creattime'=>time()));
      $this->redis->expireAt($this->cacheid, time() + $this->lifetime);
    }
    catch (Exception $e) {
      $this->error('写入缓存失败!');
    }
  }
  /**
  * 加载缓存
  * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存
  * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容
  */
  public function load() {
    if ($this->isvalid()) {
      echo $this->data['content'];
      exit();
    }
    else {
      ob_start();
    }
  }
  /**
  * 清除缓存
  */
  public function clean() {
    try {
      $this->redis->hDel($this->cacheid, array('content','creattime'));
    }
    catch (Exception $e) {
      $this->error('清除缓存失败!');
    }
  }
  /**
  * 取得缓存文件路径
  */
  private function getcacheid() {
    return $this->dir.md5($this->geturl()).$this->ext;
  }
  /**
  * 取得当前页面完整url
  */
  private function geturl() {
    $url = '';
    if (isset($_SERVER['REQUEST_URI'])) {
      $url = $_SERVER['REQUEST_URI'];
    }
    else {
      $url = $_SERVER['Php_SELF'];
      $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
    }
    return $url;
  }
  /**
  * 输出错误信息
  */
  private function error($str) {
    echo '<div style="color:red;">'.$str.'</div>';
  }
}
//用法:
// require_once('redisCache.php');
// $cache = new redisCache(10); //设置缓存生存期
// if ($_GET['clearCache']) $cache->clean();
// else $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
// //页面代码开始
// //页面代码结束
// $cache->write(); //首次运行或缓存过期,生成缓存
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP date函数参数详解
Nov 27 PHP
PHP源码之 ext/mysql扩展部分
Jul 17 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
is_uploaded_file函数引发的不能上传文件问题
Oct 29 PHP
php有道翻译api调用方法实例
Dec 22 PHP
symfony表单与页面实现技巧
Jan 26 PHP
php检测图片主要颜色的方法
Jul 01 PHP
Ajax提交表单时验证码自动验证 php后端验证码检测
Jul 20 PHP
Laravel 之url参数,获取路由参数的例子
Oct 21 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 PHP
php中配置文件保存修改操作 如config.php文件的读取修改等操作
May 12 PHP
PHP编程实现脚本异步执行的方法
Aug 09 #PHP
PHP并发查询MySQL的实例代码
Aug 09 #PHP
Yii2框架中使用PHPExcel导出Excel文件的示例
Aug 09 #PHP
PHP实现更改hosts文件的方法示例
Aug 08 #PHP
PHP编程实现阳历转换为阴历的方法实例
Aug 08 #PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 #PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 #PHP
You might like
PHP array 的加法操作代码
2010/07/24 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
2019/05/09 PHP
nodejs实现遍历文件夹并统计文件大小
2015/05/28 NodeJs
jquery中键盘事件小结
2016/02/24 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
BootStrap智能表单实战系列(六)表单编辑页面的数据绑定
2016/06/13 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
如何去除富文本中的html标签及vue、react、微信小程序中的过滤器
2018/11/21 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
浅析Python编写函数装饰器
2016/03/18 Python
Python类属性的延迟计算
2016/10/22 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python with语句和过程抽取思想
2019/12/23 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
2020/05/26 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
艺术用品:Arteza
2018/11/25 全球购物
武汉英思工程科技有限公司&ndash;ORACLE面试测试题目
2012/04/30 面试题
大学生毕业自荐信
2013/10/10 职场文书
物业管理专业个人的自我评价
2013/11/19 职场文书
法制宣传月活动方案
2014/05/11 职场文书
大学生活动总结模板
2014/07/02 职场文书
安全保证书怎么写
2015/02/28 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
军事博物馆观后感
2015/06/05 职场文书
未婚证明格式
2015/06/15 职场文书
公司食堂管理制度
2015/08/05 职场文书
Mybatis-plus在项目中的简单应用
2021/07/01 Java/Android
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL