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实现Ftp用户的在线管理的代码
Mar 06 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
PHP操作Memcache实例介绍
Jun 14 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
Linux下PHP安装mcrypt扩展模块笔记
Sep 10 PHP
php简单统计在线人数的方法
May 10 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
Feb 08 PHP
PHP7 mongoDB扩展使用的方法分享
May 02 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
Feb 26 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定义命令空间的几个注意点(推荐)
2016/10/29 PHP
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
js格式化时间小结
2014/11/03 Javascript
基于Jquery代码实现手风琴菜单
2015/11/19 Javascript
javascript时间差插件分享
2016/07/18 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
ES6中Iterator与for..of..遍历用法分析
2017/03/31 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
React如何将组件渲染到指定DOM节点详解
2017/09/08 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
vue学习笔记之slot插槽用法实例分析
2020/02/29 Javascript
[14:21]VICI vs EG (BO3)
2018/06/07 DOTA
Linux CentOS7下安装python3 的方法
2018/01/21 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python斐波那契数列的计算方法
2018/09/27 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
25个CSS3动画按钮和菜单教程分享
2012/10/03 HTML / CSS
实例讲解CSS3中的box-flex弹性盒属性布局
2016/06/09 HTML / CSS
J2EE的优越性主要表现在哪些方面
2016/03/28 面试题
工地安全标语
2014/06/07 职场文书
土建专业毕业生自荐书
2014/07/04 职场文书
党员民主评议个人总结
2014/10/20 职场文书
股权转让协议范本
2014/12/07 职场文书
员工表扬信怎么写
2015/05/05 职场文书
全国助残日活动总结
2015/05/11 职场文书
如何用JavaScipt测网速
2021/05/09 Javascript
Python趣味实战之手把手教你实现举牌小人生成器
2021/06/07 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL