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 在线打包_支持子目录
Jun 28 PHP
php仿discuz分页效果代码
Oct 02 PHP
PHP无敌近乎加密方式!
Jul 17 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
php简单获取目录列表的方法
Mar 24 PHP
PHP编译安装时常见错误解决办法
May 28 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 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
ThinkPHP模板引擎之导入资源文件方法详解
2014/06/18 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
Convert Seconds To Hours
2007/06/16 Javascript
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
jQuery选择器中含有空格的使用示例及注意事项
2013/08/25 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
jQuery中对未来的元素绑定事件用bind、live or on
2014/04/17 Javascript
Jquery弹出层插件ThickBox的使用方法
2014/12/09 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
JavaScript多线程详解
2015/08/12 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
微信小程序的分类页面制作
2017/06/27 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
[01:03:27]NAVI vs EG 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python生成随机验证码的两种方法
2015/12/22 Python
python 使用正则表达式按照多个空格分割字符的实例
2018/12/20 Python
python并发编程多进程之守护进程原理解析
2019/08/20 Python
python对常见数据类型的遍历解析
2019/08/27 Python
python 实现百度网盘非会员上传超过500个文件的方法
2021/01/07 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
HEMA英国:荷兰原创设计
2018/08/28 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
Collection和Collections的区别
2016/05/02 面试题
大学生优秀的自我评价分享
2013/10/22 职场文书
《油菜花开了》教学反思
2014/02/22 职场文书
公务员政审材料
2014/12/23 职场文书
检讨书范文
2015/01/27 职场文书
地道战观后感2000字
2015/06/04 职场文书
创业计划书之水果店
2019/07/18 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python