【学习笔记】thinkphp 生成静态缓存的雪崩问题
雪崩——————–就是指在做页面缓存是,如果网站的并发量在100【每秒有100个刷新】,在缓存页面失效的一瞬间,100个并发同时进入到后端数据库有可能让数据库崩溃。
当我在学习如果制作商城的时候,做到商城主页时,为了加快页面读取速度,用了静态缓存技术。
然而在用静态缓存是遇到了一个问题。即在对于并发问题没有得到处理
首先在配置文件代码
<?php
return array(
"HTML_CACHE_ON" => true, // 开启静态缓存
"HTML_CACHE_TIME" => 60, // 全局静态缓存有效期(秒)
"HTML_FILE_SUFFIX" => ".shtml", // 设置静态缓存文件后缀
"HTML_CACHE_RULES" => array( // 定义静态缓存规则
"index:index" =>array("index",86400),//首页生产index.shtml
),
);
定好好之后可以看见到
我们先删除缓存界面
然后我们进行Apache的并发压力测试 -n20 -c20
在index方法中加入这两句测试并发压力
测试出来发现一瞬间会缓存20次,这无疑加大了数据库的压力。
解决办法
在TP框架中的C:Users11150Desktop47dayThinkPHPLibraryBehaviorReadHtmlCacheBehavior.class.php
修改
global $fp; //设置全局变量
$fp = fopen("./read.lock","r");//打开加锁文件
$rec = flock($fp,LOCK_EX);//允许一个客户缓存,堵塞其他客户
//剩下的客户访问第一个客户生产的缓存网页 ↓
if( false !== $cacheTime && $this->checkHTMLCache(HTML_FILE_NAME,$cacheTime)) { //静态页面有效
// 读取静态页面输出
echo Storage::read(HTML_FILE_NAME,"html");
exit();
}
2、还有一个更简单的方法,就是设置缓存时间在没人的时间,比如半夜去缓存,哈哈
如果觉得有用的话记得关注一下 ————如果有任何问题可以下方留言反馈哟!嘿嘿嘿
阅读更多声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇: yii2 如何使用数据库(一)之使用createCommand()
- 下一篇:没有了