hyperf2.2框架中添加Cache代理类的流程步骤及使用案例
我的hyperf2.2开发的项目,忽然访问有点慢,所以开启mysql慢日志看看,果然应了那句老话,web项目的瓶颈百分之九十在数据库。
因为昨天下班前我把项目从hyperf2.1升级到2.2,并且采集导进去好几万数据。
然后我就开始优化了
1.根据慢sql添加对应的索引,联合索引
2.一些索引不管用的,我们叫做‘特殊’的sql,用缓存的方式处理
hyperf2.2中像使用cache这样的功能,那添加个代理类统一调用还是很有必要的
不然获取容器对象每次都要复写是比较烦的
进入步骤
创建文件夹及cache.php代理类文件
路径如下:
\hyperf\app\Utils\Cache.php
代码:
<?php
/**
* Cache代理类
* User: houtizong
* Date: 2022\5\26 0028
* Time: 10:28
*/
namespace App\Utils;
use Hyperf\Utils\ApplicationContext;
class Cache
{
//获取容器对象--单例
public static function getIns()
{
return ApplicationContext::getContainer()->get(\Psr\SimpleCache\CacheInterface::class);
}
public static function __callStatic($name, $arguments)
{
return self::getIns()->$name(...$arguments);
}
}
控制器中使用(我这用一个功能案例)
use App\Utils\Cache;
...
//文章归档 格式:2022-05
//sql 这条sql比较特殊了 用上缓存
/* 'SELECT
pubtime,
FROM_UNIXTIME( `pubtime`, '%Y-%m' ) AS time
FROM
art
WHERE
is_state = 0
AND is_del = 1
GROUP BY
time'
*/
$file = Cache::get('file');
if (!Cache::has('file')) {
$file = DB::table('art')
->select('pubtime',DB::raw('FROM_UNIXTIME(pubtime,\'%Y-%m\') as time'))
->where('is_state',0)->where('is_del',1)
->groupBy('time')->get();
Cache::getIns()->set('file', $file , 3620);//写缓存
}
...
相关文章