最近网站被cc攻击了,每天几十万IP,上百万的PV来攻击网站,导致服务器上的所有网站直接瘫痪打不开,非常影响用户体验。如果买防护软件会增加不少网站的运营成本,而且还不一定有用,没法只能想办法优化网站。后面几篇文章我会陆续分享我优化的核心过程,希望能帮助到有这方面需要的读者。

今天分享的是对网站自身问题的优化,最开始我的网站数据是从MySQL读取,然后做文件缓存,这个比起每次直接从MySQL数据库获取数据在性能上是有所提升的;但是现在遇到cc攻击,文件缓存的效率就变低了,进一步的优化方法就是数据还是从MySQL获取,但是缓存改成Redis,我网上查找了Redis的介绍,Redis是内存缓存,速率是亚毫秒级别,适合高并发,这在需要频繁读取数据的场景非常有用。
解决的工具是宝塔AI、千问和百度文心,因为所有网站是用宝塔面板部署的,最新版本出了一个AI功能,每天50点额度,里面集成了一些市面上常见的大模型,用宝塔AI的好处是,他可以直接对网站的各种访问数据、甚至网站代码进行分析,在允许的情况下甚至直接修改代码,今天分享的这个redis缓存类就是宝塔AI帮忙生成的,看了下写的比自己写的好写的完善,细节地方再结合网上的AI基本就可以改成自己满意的效果。

使用之前要安装和开启Redis数据库,如果没有检测到Redis数据库,会自动降级成文件缓存;支持设置临时缓存和永久缓存,可以根据实际情况选择。缓存类里面我加了个异常攻击IP过滤功能,具体的我在后面分享。
具体使用方法:
1、修改需要使用缓存的网站里面的用户配置文件.user.ini,将缓存类Cache.class.php所在目录添加进来,网站才有权限使用,这里我将换成类放到了一个公共目录,方便所有网站调用
open_basedir=/home/wwwroot/xxxx/:/tmp/ //修改后 open_basedir=/home/wwwroot/xxxx/:/tmp/:/home/wwwroot/common/
2、在网站的入口文件引用缓存类,并做全局声明
require_once '/www/wwwroot/common/Cache.class.php'; $GLOBALS['cache'] = Cache::getInstance();
3、使用缓存类Cache.class.php
//在具体需要使用的地方这样写
$cache = $GLOBALS['cache'];
// 获取网站配置(永久缓存)
$config = $cache->getForever('site_config');
if ($config === false) {
// 第一次:从数据库查询
$config = db_query("SELECT * FROM site_config")->fetchAll(PDO::FETCH_KEY_PAIR);
$cache->setForever('site_config', $config);
}
// 使用配置
echo $config['site_name'];
更多功能可以参考详细说明文档
