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 相关文章推荐
ecshop 批量上传(加入自定义属性)
Mar 20 PHP
关于UEditor编辑器远程图片上传失败的解决办法
Aug 31 PHP
七款最流行的PHP本地服务器分享
Feb 19 PHP
zf框架的Filter过滤器使用示例
Mar 13 PHP
PHP设计模式之装饰者模式代码实例
May 11 PHP
基于php的CMS中展示文章类实例分析
Jun 18 PHP
Thinkphp无限级分类代码
Nov 11 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
Jan 23 PHP
laravel框架学习笔记之组件化开发实现方法
Feb 01 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编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
2013/06/24 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP图片处理之图片旋转和图片翻转实例
2014/11/19 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
基于jquery的一个图片hover的插件
2010/04/24 Javascript
简单的jquery拖拽排序效果实现代码
2011/09/20 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
jQuery实现的AJAX简单弹出层效果代码
2015/11/26 Javascript
javascript时间差插件分享
2016/07/18 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
2016/10/04 Javascript
JavaScript中最常见的三个面试题解析
2017/03/04 Javascript
angular2+nodejs实现图片上传功能
2017/03/27 NodeJs
JQuery中queue方法用法示例
2019/01/31 jQuery
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
vue-element-admin 菜单标签失效的解决方式
2019/11/12 Javascript
js实现ajax的用户简单登入功能
2020/06/18 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
2020/09/04 Javascript
python中模块查找的原理与方法详解
2017/08/11 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Django--权限Permissions的例子
2019/08/28 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
django项目中新增app的2种实现方法
2020/04/01 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
自我鉴定范文
2013/11/10 职场文书
总经理驾驶员岗位职责
2013/12/04 职场文书
成绩单家长评语大全
2014/04/16 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
工作建议书范文
2019/07/08 职场文书
高通2023 年将发布高性能PC处理器
2022/04/29 数码科技
php解析非标准json、非规范json的方式实例
2022/05/10 PHP