分享个代码

公司的项目 基本都是查询 其中大量用到了redis缓存,为了避免让用户触碰到第一次的缓存长加载

我的思路是增加个链接加速命令,使用guzzle去访问这些需要缓存的接口 则会缓存住数据,但是这其中的guzzle服务器配置 因为每个人的电脑或者不同服务器配置的影响,经常会超时,或者引起网站短时间内504 502。做了个小小的优化

新建config文件 命名 url-speed.php 配置如下:

分享个代码

envenv.example 按照不同环境手动配置如下:

分享个代码

期间具体业务不便展示,会用到这些具体数值来构造guzzle服务器相关配置,数据的大小切分等,略过了

还支持自动配置

只需要 SPEED_AUTO 配置为 true 即可开启自动模式

自动模式在命令加速文件中代码如下:

原理就是识别cpu与内存配置,单词动态更改 config 文件做出配置的更改

分享个代码

这样子 一个自动识别环境配置 也可手动根据配置激进或稳定配置的 动态配置器 就完成了

本作品采用《CC 协议》,转载必须注明作者和本文链接
chowjiawei
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 25

好思路,你是要我们吐槽吗?
哈哈,这个代码不优雅,你看,这个获取 CUP 相关的代码,和 拿到 CUP 相关数据做判断的代码 本是两件事,你写在了一起,再一看,代码还安插在 __construct,导致下个人来看代码的时候,需要一定时间才能弄清 :实例这个类会做什么操作。

2年前 评论
chowjiawei (楼主) 2年前
chowjiawei

@bigbug 现在我来正名拉

1.本代码仅在一个文件内使用,过度封装 是个不好的习惯

2.本代码 是必须经过执行的 所以放到construct和内部的效果是一致的,但是内部的代码一般有很多,所以不建议放到内部的

3.你可能理解错了哦,这个代码只使用了一个功能,所以不存在看不清楚代码,需要跳转的问题哦

从头到尾,他只为了一个命令而服务哦
Laravel

2年前 评论
bigbug-gg 2年前
chowjiawei (作者) (楼主) 2年前

这里是特地起了服务去访问需要缓存的接口?

2年前 评论
chowjiawei (楼主) 2年前

感觉好像哪里怪怪的

2年前 评论
chowjiawei (楼主) 2年前
chowjiawei

虽然完整代码没有放上来

给你们看看我Artisan小王子写命令界面吧~

file

Laravel

Laravel

2年前 评论
chowjiawei

@

为了和laravel融合贯通, 方便修改添加链接,写了这个命令,通过guzzle访问,个人比较喜欢这种方式

file

2年前 评论
chowjiawei

分享个问题

由于服务器配置问题,可能导致的加速异常,我手动写了个不雅观的代码重试一次,有没有人做过这种的,遇到异常就一直重试,重试自定义几次或者一直到成功的呢? file

2年前 评论
小丑路人 2年前
小丑路人 2年前
chowjiawei (作者) (楼主) 2年前
小丑路人 2年前

@chowjiawei 我给你写一个,看看行不行

$i = 0;
$tryMaxNum = config('url-speed.try_num', 5);

while ($i < $tryMaxNum) {
    try {
        Artisan::call('url-speed:generate 1 --conditional');
        break;
    } catch (\Exception $e) {
        $i++;
        $this->error('很遗憾由于您的服务器配置问题,本次加速未能完成,正在为您重试一次!');
    }
}

if ($i === $tryMaxNum) {
    $this->error('加速选项- 1 -加速失败-跳过【您可以稍后再次运行本命令,加速过的部分将会为您跳过!】');
}
2年前 评论
chowjiawei (楼主) 2年前

啥叫guzzle服务器? 为啥通过guzzle可以缓存住数据? guzzle不就是个http client库么?

2年前 评论
chowjiawei (楼主) 2年前
luke_wu (作者) 2年前
chowjiawei (楼主) 2年前
luke_wu (作者) 2年前
chowjiawei (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!