如何不使用Composer用phpFastCache缓存SourceQuery查询结果?
用phpFastCache缓存Source Query查询结果的解决方案
别担心,我来一步步帮你把phpFastCache集成到你的Source Query流程里,轻松实现缓存查询结果、提升页面加载速度的需求!
步骤1:确保phpFastCache已正确安装
如果还没安装phpFastCache,最简单的方式是用Composer:
composer require phpfastcache/phpfastcache
如果是手动下载的包,记得在你的脚本顶部引入phpFastCache的自动加载文件:
require_once '/path/to/phpfastcache/autoload.php';
步骤2:修改queryresults.php添加缓存逻辑
我们要做的是:先检查缓存里有没有现成的查询结果,如果有就直接用;如果没有(或者缓存过期了),再执行Source Query,然后把结果存入缓存。这样就能避免每次加载页面都发起耗时的服务器查询了。
修改后的queryresults.php代码如下(我加了详细注释,方便你理解):
<?php // 引入phpFastCache自动加载(如果用Composer安装,这步可能已经自动处理了,没反应的话加上) require_once __DIR__ . '/vendor/autoload.php'; use Phpfastcache\CacheManager; use Phpfastcache\Config\ConfigurationOption; // 初始化phpFastCache,这里用文件缓存(适合新手,不需要额外服务) CacheManager::setDefaultConfig(new ConfigurationOption([ 'path' => __DIR__ . '/cache', // 缓存文件存放的目录,要确保这个目录有读写权限 ])); // 获取缓存实例 $cache = CacheManager::getInstance('Files'); // 定义唯一的缓存键:用服务器IP+端口组合,避免不同服务器的缓存冲突 $cacheKey = "source_query_{$serveroneip}_{$serveroneport}"; // 设置缓存过期时间,比如5分钟(300秒),你可以根据需求调整 $cacheTTL = 300; // 先尝试从缓存获取数据 $infos = $cache->getItem($cacheKey)->get(); // 如果缓存里没有数据,或者缓存过期了,就执行Source Query if (is_null($infos)) { $serveroneip = "example.ip"; $serveroneport = "27015"; $server = new SourceQuery($serveroneip, $serveroneport); $infos = $server->getInfos(); // 把查询结果存入缓存 $cacheItem = $cache->getItem($cacheKey); $cacheItem->set($infos)->expiresAfter($cacheTTL); $cache->save($cacheItem); } ?>
步骤3:index.php无需大改动
你的index.php代码几乎不用改,现在引入queryresults.php后,$infos会优先从缓存读取,只有缓存失效时才会发起新的查询:
<?php include ("queryresults.php") ?> <p><?php echo $infos['players'] . ' / ' . $infos['places']; ?></p>
(注意:你原来的代码里用了单引号拼接,这里改成了PHP的echo输出,避免语法错误)
额外小贴士
- 确保
/cache目录有读写权限,不然缓存无法写入 - 缓存过期时间可以根据你的需求调整:如果玩家数更新频繁,可以设成1分钟(60秒);如果不需要太实时,10分钟也没问题
- 如果担心查询失败导致缓存为空,可以加个错误处理:比如查询失败时,保留旧的缓存数据(可以用
$cache->getItem($cacheKey)->isHit()来判断之前有没有缓存)
内容的提问来源于stack exchange,提问作者Tyler Shannon
相关产品推荐
相关产品推荐

