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 03 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
Codeigniter出现错误提示Error with CACHE directory的解决方案
Jun 12 PHP
php实现将数组转换为XML的方法
Mar 09 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
PHP借助phpmailer发送邮件
May 11 PHP
PHP IDE PHPStorm配置支持友好Laravel代码提示方法
May 12 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
php实现中文转数字
Feb 18 PHP
微信开发之获取JSAPI TICKET
Jul 07 PHP
php表单习惯用的正则表达式
Oct 11 PHP
PHP设计模式之装饰器模式定义与用法详解
Apr 02 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 的 __FILE__ 常量
2007/01/15 PHP
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
php+highchats生成动态统计图
2014/05/21 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
PHP临时文件的安全性分析
2014/07/04 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PHP实现下载断点续传的方法
2014/11/12 PHP
PHP实现冒泡排序的简单实例
2016/05/26 PHP
简单实现php上传文件功能
2017/09/21 PHP
javascript数字数组去重复项的实现代码
2010/12/30 Javascript
jquery动画4.升级版遮罩效果的图片走廊--带自动运行效果
2012/08/24 Javascript
JQuery异步加载无限下拉框级联功能实现示例
2014/02/19 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
拥Bootstrap入怀——导航栏篇
2016/05/30 Javascript
深入解析JavaScript中的arguments对象
2016/06/12 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
那些精彩的JavaScript代码片段
2017/01/12 Javascript
JS引用传递与值传递的区别与用法分析
2018/06/01 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
windows下添加Python环境变量的方法汇总
2018/05/14 Python
python多进程实现文件下载传输功能
2018/07/28 Python
对python中dict和json的区别详解
2018/12/18 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
习近平在党的群众路线教育实践活动总结大会上的讲话全文
2014/10/25 职场文书
家长对孩子的寄语
2015/02/26 职场文书
清洁工工作总结
2015/08/11 职场文书
2016年小学生清明节广播稿
2015/12/17 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
Django项目如何正确配置日志(logging)
2021/04/29 Python
“鬼灭之刃”热度不减,其成功背后的原因是什么?
2022/03/22 日漫