【学习笔记】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次,这无疑加大了数据库的压力。

解决办法

  1. 在TP框架中的C:\Users\11150\Desktop\47day\ThinkPHP\Library\Behavior\ReadHtmlCacheBehavior.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、还有一个更简单的方法,就是设置缓存时间在没人的时间,比如半夜去缓存,哈哈

如果觉得有用的话记得关注一下 ————如果有任何问题可以下方留言反馈哟!嘿嘿嘿

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值