最近在做微信的摇一摇跑马活动,实现原理是用户摇动手机,通过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');
?>
分享到:
相关推荐
数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存有需要的朋友可参考. 1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时...
数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存。感兴趣的朋友可以参考一下。 1.对于一般的变量,把该变量变成php语言的格式,写到文件中,...
前言 顾名思义文件缓存转内存缓存就是将存储在文件中的数据转到内存中去,实现磁盘操作转为内存操作,这样可以大大提高数据访问速度,并能实现缓存数据的分布式部署。文件缓存与内存缓存的介绍请参考名词解释部分。 ...
1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include...3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库.
介绍php缓存数据功能的mysqli类,若框架中使用__autoload(),可以不用加载文件,需要的朋友可以学习参考,如果小伙伴们有更好的方案可以拿过来与我们一起学习分享。
一个很好用的php缓存文件类,得到本类实例,得到缓存信息,设置一个缓存,清除一条缓存,判断缓存是否存在,通过缓存id得到缓存信息路径,通过id得到缓存信息存储文件名,把数据写入文件。
一个php实现文件缓存类。 思路很简单: 就是把缓存时间和数据写入文件。设置文件保存路径,设置文件后缀名,目录不存在建立目录,设置定长缓存时间,保存到缓存文件中,获得缓存数据 。
1、缓存有页面缓存与数据缓存,页面缓存就是把显示的页面生成一个文件,数据缓存就是把数据生成一个文件,都有一个更新缓存的间隔时间,判断文件的修改时间或者生成时间的时间邮戳加上间隔时间的秒数如果大于当前...
这个类可以用来缓存一些基本信息,比如博客的header,footer,sidebar中的一些不经常变化,从数据库中取出的内容,取数据前先判断文件缓存中的内容是否过期,如果没过期取出来,过期了则连接数据库查询,并将结果重新写入...
php缓存数据功能的mysqli类,若框架中使用__autoload(),可以不用加载文件
在需要缓存数据的时候,通过include方 PHP文件缓存的性能测试 软件测试 前言: 在开发MooPHP的过程中,为了寻找更为高效的缓存方式,对两种最常用的缓存方式进行了测试。 PHP常用缓存方式: 第一种,把需要...
以前开发的项目中的一个文件缓存类,自己写的。 支持缓存的数据类型包括null、boolean、string、int、array、object(只能以数组形式缓存属性);缓存的内容为PHP源码,方便查错;支持每个缓存文件设置不同的失效...
如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的。 对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了...
这不现实,当然,有的时候临时放如服务器缓存,如ob_start()这个缓存页面开启的话在发送文件头之前页面内容都被缓存在内存中,知道等页面输出自动清楚或者等待 ob_get_contents的返回,[或者被ob_end_clean显示的清除,这...
一、文件缓存 二、数据查询结果缓存,使用内存来实现高速缓存 本例主要使用文件缓存。 主要原理使用缓存函数来存储网页显示结果,如果在规定时间里再次调用则可以加载缓存文件。 ...
缓存PHP文件缓存,简单,简单,快速的文件缓存如何使用 ?包括类 include('Cache/Cache.php');要设置缓存数据,请使用 set 函数来做到这一点,第一个参数是缓存数据的名称,第二个参数是值 Cache::set('age', 35);...
如果访问量大的话会给数据库造成很大的负担,所以对于变化不经常的内容要做好php 数据cache(缓存)是十分必要的。 对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于...
现在一些.NET开发人员开始放弃ASP.NET内置的缓存机制,转而使用Memcached——一种分布式的内存缓存系统。当运行在单独的Web服务器上,你可以很容易地清除一个已经确认被改变了的缓存。可惜,ASP.NET没有一个很好的...