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中的正规表达式(一)
Oct 09 PHP
PHP 翻页 实例代码
Aug 07 PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 PHP
PHP闭包实例解析
Sep 08 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
php动态生成版权所有信息的方法
Mar 24 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
php fread读取文件注意事项
Sep 24 PHP
yii2高级应用之自定义组件实现全局使用图片上传功能的方法
Oct 08 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
PHP hex2bin()函数用法讲解
Feb 25 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 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中http_build_query 的一个问题
2012/03/25 PHP
PHP7 其他语言层面的修改
2021/03/09 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
javascript Demo模态窗口
2009/12/06 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
Javascript中string转date示例代码
2013/11/01 Javascript
Jquery $.getJSON 在IE下的缓存问题解决方法
2014/10/10 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
jQuery选择器之子元素过滤选择器
2017/09/28 jQuery
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
JS实现的判断方法、变量是否存在功能示例
2020/03/28 Javascript
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
好用的Python编辑器WingIDE的使用经验总结
2016/08/31 Python
Python数据结构与算法之完全树与最小堆实例
2017/12/13 Python
python书籍信息爬虫实例
2018/03/19 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Django集成CAS单点登录的方法示例
2019/06/10 Python
python语言基本语句用法总结
2019/06/11 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python手机号前7位归属地爬虫代码实例
2020/03/31 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
python绘制汉诺塔
2021/03/01 Python
Linux开机引导的步骤是什么
2015/10/19 面试题
公司晚会策划方案
2014/05/17 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
优秀员工推荐材料
2014/12/20 职场文书
创业计划书之养殖业
2019/10/11 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python