php数据缓存
用php进行微信开发时,碰到access_token长久保存的问题,以前都是用框架里的Cache直接set、get一下就完了。现在没框架可用了,只好自己动手写一个cache暂时用。
这个Cache类用来缓存一些具有时效性的数据,比如微信基础接口的access_token、网页Auth验证的access_token等
下面的代码使用本地文件进行数据的缓存
//测试
$cache = new Cache();
$cache->dir = "../cc/";
//$cache->setCache("zhang", "zhangsan", 100);
echo $cache->getCache("zhang");
//$cache->removeCache("zhang"); $cache->setCache("liu", "liuqi", 100);
echo $cache->getCache("liu"); class Cache{
public $cacheFile = "cache.json"; //文件
public $dir = "./cach2/"; //目录 //缓存
public function setCache($name, $val, $expires_time){
$file = $this->hasFile();
//字符串转数组
$str = file_get_contents($file);
$arr = json_decode($str, true); //值为空,则移除该缓存
if(empty($val)){
unset($arr[$name]);
}else{
$arr[$name] = array("value"=>$val, "expires_time"=>$expires_time, "add_time"=>time());
}
//数组转字符串
$str = json_encode($arr);
file_put_contents($file, $str);
}
public function getCache($name){
$file = $this->hasFile(); //字符串转数组
$str = file_get_contents($file);
$allArr = json_decode($str, true);
$arr = $allArr[$name]; if(!$arr || time() > ($arr["expires_time"] + $arr["add_time"])){
$this->removeCache($name); //过期移除
return false;
}
return $arr["value"];
}
public function removeCache($name){
$this->setCache($name, '', 0);
} private function hasFile(){
//如果不存在缓存文件,则创建一个
if(!file_exists($this->dir)){
mkdir($this->dir);
}
if(!file_exists($this->dir . $this->cacheFile)){
touch($this->dir . $this->cacheFile);
}
return $this->dir . $this->cacheFile;
}
}
上面的Cache类共有set、get、remove三种操作。另外还可以自定义缓存文件的保存路径,只要设置Cache的dir属性就可以了。
php数据缓存的更多相关文章
- Servlet数据缓存
缓存是提高数据访问能力,降低服务器压力的一种必要的方式,今天我要说的数据缓存方式有两种,1-->session对单个数据访问接口页面的数据进行缓存,2-->单例模式对整个servlet页面 ...
- 面localStorage用作数据缓存的简易封装
面localStorage用作数据缓存的简易封装 最近做了一些前端控件的封装,需要用到数据本地存储,开始采用cookie,发现很容易就超过了cookie的容量限制,于是改用localStorage,但 ...
- jQuery数据缓存方案详解:$.data()的使用
我们经常使用隐藏控件或者是js全局变量来临时存储数据,全局变量容易导致命名污染,隐藏控件导致经常读写dom浪费性能.jQuery提供了自己的数据缓存方案,能够达到和隐藏控件.全局变量相同的效果,但是j ...
- jQuery 2.0.3 源码分析 数据缓存
历史背景: jQuery从1.2.3版本引入数据缓存系统,主要的原因就是早期的事件系统 Dean Edwards 的 ddEvent.js代码 带来的问题: 没有一个系统的缓存机制,它把事件的回调都放 ...
- SQL Server 数据缓存
引言 SQL Server通过一些工具来监控数据,其中之一的方法就是动态管理管理视图(DMV). 常规动态服务器管理对象 dm_db_*:数据库和数据库对象 dm_exec_*:执行用户代码和关联的连 ...
- iOS开发网络篇—数据缓存
iOS开发网络篇—数据缓存 一.关于同一个URL的多次请求 有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的. 上面的情况会造 ...
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和 ...
- 微信小程序-数据缓存
每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSync).wx.clearSt ...
- Memcached 数据缓存系统
Memcached 数据缓存系统 常用命令及使用:http://www.cnblogs.com/wayne173/p/5652034.html Memcached是一个自由开源的,高性能,分布式内存对 ...
- 【菜鸟学习jquery源码】数据缓存与data()
前言 最近比较烦,深圳的工作还没着落,论文不想弄,烦.....今天看了下jquery的数据缓存的代码,参考着Aaron的源码分析,自己有点理解了,和大家分享下.以后也打算把自己的jquery的学习心得 ...
随机推荐
- JSP Servlet 路径解析 路径设置
转自:http://ethen.iteye.com/blog/800415 在用JSP和Servlet编写Web应用时,经常遇到的问题就是找不到.do路径,或者.do路径不能解析,其实归根到底就是Se ...
- [MySQL]导入导出
[MySQL]导入导出 一 导入文本数据 1)mysql->load data infile 数据文件c:/mytable.txt 如下:(每一行为一条记录,记录的字段间用tab隔开,最后一个字 ...
- Linux常用命令_(进程管理)
进程管理:ps.top.kill 指令名称:ps语法:ps [选项]-a显示所有终端机下执行的程序.-e显示所有程序.-f显示UID,PPIP,C与STIME栏位.功能描述:查看系统中运行的进程.范例 ...
- vim跳到文件头和文末结尾
gg : 跳转到文件头 Shift+g : 跳转到文件末尾
- VMware12版虚拟机怎么安装win7系统
工具/原料 VMware workstation 12 windows7镜像ios系统文件 链接:http://pan.baidu.com/s/1c0YrDgG 密码:vna1 建立一个新的虚拟机 ...
- SCU3312 Stockholm Knights(最大流)
题目大概说一个n×m的格子中,'.'代表空地,'#'代表障碍,'K'代表骑士,'D'代表目的地.骑士每走一步花一条,每一步可以往(+2,+3)(-2,+3)...八个方向走,问占领所有目的地最少要几天 ...
- python 代码片段15
#coding=utf-8 ''' 如果运行时发生异常的话,解释器会查找相应的处理函数.要是在当前函数里没有 找到的话,它会将异常传递给上层的调用函数,看看那里能不能处理.如果在在最 外层还没有找到的 ...
- System call in linux by C
1: #include <stdlib.h> 2: int system(const char *command); 3: 4: while (something) { 5: int r ...
- Treap和名次树
Treap名字的来源:Tree+Heap,正如名字一样,就是一颗简单的BST,一坨堆的合体.BST的不平衡的根本原因在于基于左<=根<=右的模式吃单调序列时候会无脑成长链,而Treap则添 ...
- html ul 里 能放其他标签吗,比如h3、p?
按标准的话,ul 里面应该只能放li,不过看见同事有的放了h3.p这些,这样到底可不可以? <ul>里面只能放<li>.但是<li>里面可以放<h*> ...