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 中的str_replace 函数总结
Apr 27 PHP
php Xdebug 调试扩展的安装与使用.
Mar 13 PHP
获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)
Jun 01 PHP
PHP中的函数-- foreach()的用法详解
Jun 24 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
WordPress主题制作中自定义头部的相关PHP函数解析
Jan 08 PHP
验证token、回复图文\文本、推送消息的实用微信类php代码
Jun 28 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
php生成HTML文件的类方法
Oct 11 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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人民币金额数字转中文大写的函数代码
2013/02/27 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
不要小看注释掉的JS 引起的安全问题
2008/12/27 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
Jquery Change与bind事件代码
2011/09/29 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
JavaScript获取网页、浏览器、屏幕高度和宽度汇总
2014/12/18 Javascript
JS中的THIS和WINDOW.EVENT.SRCELEMENT详解
2015/05/25 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
微信小程序中使用javascript 回调函数
2017/05/11 Javascript
js实现从左向右滑动式轮播图效果
2017/07/07 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
解决Linux无法正常安装与卸载Node.js的方法
2018/01/19 Javascript
vue element-ui table表格滚动加载方法
2018/03/02 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
如何在selenium中使用js实现定位
2020/08/18 Javascript
python实现反转部分单向链表
2018/09/27 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python shutil文件操作工具使用实例分析
2019/12/25 Python
python str字符串转uuid实例
2020/03/03 Python
python中urllib.request和requests的使用及区别详解
2020/05/05 Python
详解python变量与数据类型
2020/08/25 Python
关于python3.9安装wordcloud出错的问题及解决办法
2020/11/02 Python
莫斯科购买书籍网站:Book24
2020/01/12 全球购物
教师见习总结范文
2015/06/23 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
CSS完成视差滚动效果
2021/04/27 HTML / CSS