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 相关文章推荐
真正的ZIP文件操作类(php)
Jul 21 PHP
PHP中的string类型使用说明
Jul 27 PHP
openPNE常用方法分享
Nov 29 PHP
php定界符
Jun 19 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
详谈PHP编码转换问题
Jul 28 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
Zend Framework生成验证码并实现验证码验证功能(附demo源码下载)
Mar 22 PHP
PHP实现上传多文件示例代码
Feb 20 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
解决Laravel5.5下的toArray问题
Oct 15 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
国内咖啡文化
2021/03/03 咖啡文化
3
2006/10/09 PHP
PHP查找与搜索数组元素方法总结
2015/06/12 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
PHP命名空间和自动加载类
2016/04/03 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
js实现的切换面板实例代码
2013/06/17 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
window.location不跳转的问题解决方法
2014/04/17 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
Node.js实现文件上传
2016/07/05 Javascript
微信小程序request请求后台接口php的实例详解
2017/09/20 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
在node环境下parse Smarty模板的使用示例代码
2019/11/15 Javascript
JS常用排序方法实例代码解析
2020/03/03 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
Python中使用bidict模块双向字典结构的奇技淫巧
2016/07/12 Python
Python中字符串格式化str.format的详细介绍
2017/02/17 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
Python 实例方法、类方法、静态方法的区别与作用
2019/08/14 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
django中嵌套的try-except实例
2020/05/21 Python
python 基于wx实现音乐播放
2020/11/24 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
python爬虫基础之urllib的使用
2020/12/31 Python
IdealFit官方网站:女性蛋白质、补充剂和运动服装
2019/03/24 全球购物