hyperf2.2框架中添加Cache代理类的流程步骤及使用案例

2023-06-01 00:00:00 框架 步骤 流程

我的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);//写缓存

}

...

相关文章