需求是这样的,我有一个首页,浏览器端访问时,返回的数据从配置文件就可以取出来,不需要连接数据库。
这个首页访问量比较大,想提高访问的速度。
但在这个首页,我想保存浏览器端的信息,如访问的IP,时间等等。
我不想在每次访问这个首页就把信息保存到数据库,而是想达到一个量后再一次性存入数据库。再把计数器清零,缓存清零。再累加,循环下去。
请达人给个方案。
这个首页访问量比较大,想提高访问的速度。
但在这个首页,我想保存浏览器端的信息,如访问的IP,时间等等。
我不想在每次访问这个首页就把信息保存到数据库,而是想达到一个量后再一次性存入数据库。再把计数器清零,缓存清零。再累加,循环下去。
请达人给个方案。
#web端接口
<?php
#数据写入
function example_lazy_write($key, $data) {
example_cache($key, $data);
#log_data($key, $data); 将数据写入文件
}
#数据读取
function example_read($key) {
if(false === ($data = example_cache($key))) {
#从数据库读取
}
}
#缓存操作接口
function example_cache($key, $data = null) {
if(isset($data)) {
#写入缓存
} else {
#从缓存读取
}
}
?>
#另外需要一个常驻进程
<?php
#数据持久化到DB
function example_persist($filename) {
#读文件, 一次写入DB
}
?>
可以的。得看你的内存跟你要存的数据量。100M=102400K=104857600B自己掂量一下就可以了。。
<?php
#数据持久化到DB
function example_persist($filename) {
#读文件, 一次写入DB
}
-----------------------------
请问哈 常驻内存怎么实现?
对于PHP的应用, 为了代码的复用, 降低开发成本, 通常都是用PHP开发的.
一个最简单的例子就是
<?php
while($i ++ < 100) {
echo 'Hello ' . $i . chr(10);
sleep(1);
}
?>
假设上述代码存档到文件/home/xxx/test.php中, 并假设你的php可执行文件在/usr/local/bin/php, 那么就可以在终端使用/usr/local/bin/php /home/xxx/test.php &让它后台方法运行(linux环境)当然, 常驻进程需要完成实际的任务, 以你的问题, 可以这样解决<?php
define('RUN_FLAG', 'run');
$GLOBALS[RUN_FLAG] = true; #为了程序中可以控制退出. 更好的方式是使用信号控制
while($GLOBALS[RUN_FLAG]) {
work_func();
usleep(1000); #任务执行间隔, 让它休息下.
}
function work_func() {
#读文件
#分析要持久化的内容
#持久化
#更新文件
}
?>
当然, 如果你期望你的这个常驻进程工作更加理想, 那可能需要增加一些进程控制相关的代码, 可以看看PHP的pcntl扩展.
<script type="text/javascript" src="http://your.domain.com/stat.php"></script>
在stat.php
加入
header('Content-type: application/x-javascript');
//不缓存
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");