php文件缓存数据
最近在做微信的摇一摇跑马活动,实现原理是用户摇动手机,通过ajax往数据库写入数据(小马跑的步数),然后PC端用过ajax每一秒钟从数据库中调取一次数据(小马跑的步数),然后显示在PC屏幕上,这样就会非常频繁的读写数据库,而且小马跑步的数据只要活动结束即可清除,完全没有存入数据库的必要。
这个功能由于不能够做成静态化,那么就只能够动态,用动态的时候会对数据库和服务器压力带来很大的考验。
所以就只能用到缓存数据的方式了。
数据缓存的形式包括:
1、将数据缓存到内存,相信大家这个就会想到了Memcached.memcached是高性能的分布式内存缓存服务器。 一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、 提高可扩展性。
2、用文件来缓存数据.将数据保存到文件中,用key=>value的形式来保存,key指文件名.这个地方必须要保证key的唯一性
设置文件的缓存时间,如果过时了就从数据库中得到数据并保存到文件中,下面是一个文件缓存类:
1、缓存数据
2、得到数据
3、判断缓存数据是否存在
4、删除某个缓存数据
5、清除过时的缓存数据
6、清除所以的缓存数据
<?php
class Inc_FileCache{ private $cacheTime = 3600; //默认缓存时间
private $cacheDir = './cache'; //缓存绝对路径
private $md5 = true; //是否对键进行加密
private $suffix = ".php"; //设置文件后缀 public function __construct($config){
if( is_array( $config ) ){
foreach( $config as $key=>$val ){
$this->$key = $val;
}
}
} //设置缓存
public function set($key,$val,$leftTime=null){
$key = $this->md5 ? md5($key) : $key;
$leftTime = $leftTime ? $leftTime : $this->cacheTime;
!file_exists($this->cacheDir) && mkdir($this->cacheDir,0777);
$file = $this->cacheDir.'/'.$key.$this->suffix;
$val = serialize($val);
@file_put_contents($file,$val) or $this->error(__line__,"文件写入失败");
@chmod($file,0777) or $this->error(__line__,"设定文件权限失败");
@touch($file,time()+$leftTime) or $this->error(__line__,"更改文件时间失败");
} //得到缓存
public function get($key){
$this->clear();
if( $this->_isset($key) ){
$key_md5 = $this->md5 ? md5($key) : $key;
$file = $this->cacheDir.'/'.$key_md5.$this->suffix;
$val = file_get_contents($file);
return unserialize($val);
}
return null;
} //判断文件是否有效
public function _isset($key){
$key = $this->md5 ? md5($key) : $key;
$file = $this->cacheDir.'/'.$key.$this->suffix;
if( file_exists($file) ){
if( @filemtime($file) >= time() ){
return true;
}else{
@unlink($file);
return false;
}
}
return false;
} //删除文件
public function _unset($key){
if( $this->_isset($key) ){
$key_md5 = $this->md5 ? md5($key) : $key;
$file = $this->cacheDir.'/'.$key_md5.$this->suffix;
return @unlink($file);
}
return false;
} //清除过期缓存文件
public function clear(){
$files = scandir($this->cacheDir);
foreach ($files as $val){
if (@filemtime($this->cacheDir."/".$val) < time()){
@unlink($this->cacheDir."/".$val);
}
}
} //清除所有缓存文件
public function clear_all(){
$files = scandir($this->cacheDir);
foreach ($files as $val){
@unlink($this->cacheDir."/".$val);
}
} private function error($line,$msg){
die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg");
}
} ?>
在页面中的调用方法如下:
<?php
include("./cacheClass.php"); $cacheFile = new Inc_FileCache(array('cacheTime'=>60,'suffix'=>'.php')); $value1 = '缓存成功1';
$value2 = '缓存成功2';
$value3 = '缓存成功3'; $cacheFile->set('key1',$value1);
$cacheFile->set('key2',$value2);
$cacheFile->set('key3',$value3); echo $cacheFile->get('key3');
?>
对于跑马这种活动,还有一种数据存储方式是:在MySQL中创建一张使用MEMORY引擎的表。MEMORY存储引擎使用保存在内存中的内容来创建表,且默认使用哈希索引,这使得它的响应速度非常快,对创建临时表非常有用。但是,当服务器关闭时,所有存储在MEMORY表里的数据都会丢失。MEMORY表只用于特殊范围,不会用于长期存储数据。
php文件缓存数据的更多相关文章
- ThinkPHP使用Memcached缓存数据
ThinkPHP默认使用文件缓存数据,支持Memcache等其他缓存方式,有两个PHP扩展:Memcache和Memcached,Memcahe官方有说明,主要说一下Memcached. 相对于PHP ...
- Dcloud课程5 php如何实现文件缓存技术(静态数据缓存)
Dcloud课程5 php如何实现文件缓存技术(静态数据缓存) 一.总结 一句话总结:保存在磁盘上的静态文件,用PHP生成数据到静态文件中.其实cookie和session使用的就是这样的技术,所以c ...
- 文件缓存tmpfs + 数据缓存SSDB(一)
一.文件缓存tmpfs 1.特性 1) 基于内存的文件系统,RAW+SWAP,虚拟内存 2) tmpfs使用虚拟内存,/dev/shm/使用共享内存 3) 访问速度快,可以动态调整大小 4) 没有持久 ...
- thinkphp 缓存数据
thinkphp 中内置了缓存操作 3.1版本的数据缓存方法是cache 基本用法: S(array('type'=>'xcache','expire'=>60)); 缓存初始化 缓存初始 ...
- 刷新本地的DNS缓存数据
ipconfig /flushdns”执行,刷新本地的DNS缓存数据. ipconfig /displaydns 查看本地DNS缓存记录的命令为:ipconfig /displaydns.你 ...
- PHP文件缓存实现
有些时候,我们不希望使用redis等第三方缓存,使得系统依赖于其他服务.这时候,文件缓存会是一个不错的选择. 我们需要文件缓存实现哪些共更能: 功能实现:get.set.has.increment.d ...
- 高性能文件缓存key-value存储—Redis
1.高性能文件缓存key-value存储-Memcached 2.ASP.NET HttpRuntime.Cache缓存类使用总结 备注:三篇博文结合阅读,简单理解并且使用,如果想深入学习,请多参考文 ...
- php使用文件缓存
使用php读取mysql中的数据很简单,数据量不大的时候,mysql的性能还是不错的.但是有些查询可能比较耗时,这时可以把查询出的结果,缓存起来,减轻mysql的查询压力. 缓存的方法有几种:使用me ...
- iOS五种本地缓存数据方式
iOS五种本地缓存数据方式 iOS本地缓存数据方式有五种:前言 1.直接写文件方式:可以存储的对象有NSString.NSArray.NSDictionary.NSData.NSNumber,数据 ...
随机推荐
- HihoCoder1672 : 区间问题([Offer收割]编程练习赛41)(贪心)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定N个区间[Ai, Bi],请你找到包含元素最少的整数集合S,使得每个区间都至少有两个整数在S中. 例如给定三个区间[1 ...
- CF 949D Curfew——贪心(思路!!!)
题目:http://codeforces.com/contest/949/problem/D 有二分答案的思路. 如果二分了一个答案,首先可知越靠中间的应该大约越容易满足,因为方便把别的房间的人聚集过 ...
- UnrealScript常用函数汇总
转自:http://www.unrealchina.org/forum.php?mod=viewthread&tid=672&extra=page%3D1 foreach [用来遍历游 ...
- Openstack web 添加和删除按钮
注:当前已经时候用smaba将openstack环境的源码共享到windows系统上,并使用pycharm进行代码编辑和修改(参见openstack开发环境搭建).如下图:
- NancyFX 第二章 Rest框架
正如你看到的,Nancy有两个主要用途. 其中第一项是作为一种通用的基于 REST 框架,可替代 ASP.NET Web API 或其他Rest工具包. 默认情况下,Nancy提供一流的路由和内容协商 ...
- jquery效果基础运用
jQuery 版本 2 以上不支持 IE6,7,8 浏览器.如果需要支持 IE6/7/8,那么请选择1.9你还可以通过条件注释在使用 IE6/7/8 时只包含进1.9.<!--[if lt IE ...
- iOS ipa包重签名
背景:公司做游戏SDK的,提供SDK给第三方后,他们打包过来我们需要分发在不同的渠道,这个时候需要修改SDK的配置文件,ipa文件修改后是需要手机越狱或者ipa重签名才能安装成功的,所以研究了一下重签 ...
- 文本主题抽取:用gensim训练LDA模型
得知李航老师的<统计学习方法>出了第二版,我第一时间就买了.看了这本书的目录,非常高兴,好家伙,居然把主题模型都写了,还有pagerank.一路看到了马尔科夫蒙特卡罗方法和LDA主题模型这 ...
- 无监督学习:Linear Dimension Reduction(线性降维)
一 Unsupervised Learning 把Unsupervised Learning分为两大类: 化繁为简:有很多种input,进行抽象化处理,只有input没有output 无中生有:随机给 ...
- CentOS 安装配置vncserver
yum 安装tiger vncserver yum install tigervnc-server 安装后输入 vncserver 设置密码 3.配置用户 vim /etc/sysconfig/vnc ...