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(); //首次运行或缓存过期,生成缓存

?>
时间: 2024-10-05 21:08:59

php+redis缓存类的相关文章

单服务缓存redis工具类

import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /** * 单服务缓存redis工具类(需要额外jar包jedis) */ public class RedisSingletonPool { private static String ip = ConfigUtil.readConfigForObject("SIN

【php】基于Redis的js、css缓存类

<?php /* *基于Redis的js.css缓存类(有效解决tp等框架访问public出现的各种问题) *Written by Radish 2015.8.16 */ define('REDIS_HOST', '127.0.0.1'); define('REDIS_PORT', 6379); // class im { function __construct() { $this->redis = new Redis(); $this->redis->connect(REDIS

redis缓存工具类,提供序列化接口

1.序列化工具类 1 package com.qicheshetuan.backend.util; 2 3 import java.io.ByteArrayInputStream; 4 import java.io.ByteArrayOutputStream; 5 import java.io.ObjectInputStream; 6 import java.io.ObjectOutputStream; 7 8 public class SerializeUtil { 9 10 //序列化 11

封装php redis缓存操作类

封装php redis缓存操作类,集成了连接redis并判断连接是否成功,redis数据库选择,检测redis键是否存在,获取值,写入值,设置生存时间和删除清空操作. php redis类代码: <?php/*** redisdrive.class.php* php redis 操作类**/class redisdrive{ //键名 public $key; //值 public $value; //默认生存时间 public $expire = 86400; /*60*60*24*/ //连

java 整合redis缓存 SSM 后台框架 rest接口 shiro druid maven bootstrap html5

获取[下载地址]   QQ: 313596790A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块C 集成阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩

java 整合redis缓存 SSM 后台框架 rest接口 shiro druid

获取[下载地址]   QQ: 313596790   [免费支持更新] 三大数据库 mysql  oracle  sqlsever   更专业.更强悍.适合不同用户群体 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统] A 集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; QQ:313596790 freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,service等完整模块 B 集成阿里巴巴数据库连

springboot redis 缓存对象

只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile("org.springframework.boot:spring-boot-starter-data-redis:${springBootVersion}") redis configuration 中启用缓存 @Configuration @EnableCaching public class Re

asp.net性能优化之使用Redis缓存(入门)

1:使用Redis缓存的优化思路 redis的使用场景很多,仅说下本人所用的一个场景: 1.1对于大量的数据读取,为了缓解数据库的压力将一些不经常变化的而又读取频繁的数据存入redis缓存 大致思路如下:执行一个查询 1.2首先判断缓存中是否存在,如存在直接从Redis缓存中获取. 1.3如果Redis缓存中不存在,实时读取数据库数据,同时写入缓存(并设定缓存失效的时间). 1.4缺点,如果直接修改了数据库的数据而又没有更新缓存,在缓存失效的时间内将导致读取的Redis缓存是错误的数据. 2:R

Redis 缓存 + Spring 的集成示例(转载)

1. 依赖包安装 pom.xml 加入: <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-redis</artifactId> <version>1.6.0.RELEASE</version> </dependency> <dependency> <groupId>redis