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网站在线人数统计
Apr 09 PHP
在PHP中使用模板的方法
May 24 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP常用处理静态操作类
Apr 03 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
PHP单例模式是什么 php实现单例模式的方法
May 14 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
Mar 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
linux环境apache多端口配置虚拟主机的方法深入介绍
2013/06/09 PHP
php使用$_POST或$_SESSION[]向js函数传参
2014/09/16 PHP
php中JSON的使用与转换
2015/01/14 PHP
高质量PHP代码的50个实用技巧必备(下)
2016/01/22 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
PHP两个n位的二进制整数相加问题的解决
2018/08/26 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
xmlHTTP实例
2006/10/24 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
利用jquery的获取JS文件中的字符串内容
2012/02/14 Javascript
javascript遍历控件实例详细解析
2014/01/10 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
原生js获取元素样式的简单方法
2016/08/06 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
jQuery实现页面滚动时智能浮动定位
2017/01/08 Javascript
jQuery简介_动力节点Java学院整理
2017/07/04 jQuery
javascript 构建模块化开发过程解析
2019/09/11 Javascript
Vue的生命周期操作示例
2019/09/17 Javascript
js校验开始时间和结束时间
2020/05/26 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
Python3安装Pymongo详细步骤
2017/05/26 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
HTTP状态码详解
2021/03/18 杂记
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
BONIA官方网站:国际奢侈品牌和皮革专家
2016/11/27 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
英语专业毕业生自荐信
2013/10/28 职场文书
医药代表个人的求职信分享
2013/12/08 职场文书
高级工程师岗位职责
2013/12/15 职场文书
2014年端午节活动方案
2014/03/11 职场文书
科技活动周标语
2014/10/08 职场文书
房屋登记授权委托书范本
2014/10/09 职场文书
职工食堂管理制度
2015/08/06 职场文书
jquery插件实现搜索历史
2021/04/24 jQuery