项目背景:最初是想给接口加缓存,但是不想每个接口添加缓存代码,就写了个统一的缓存系统。
技术方案:
- 本项目使用laravel框架
- 监听requestHanled事件写入缓存
- 添加apiCache中间件,对每个get访问进行拦截,检查是否有缓存,如果有,就读取缓存就返回,如果没有,就执行下一个中间件。
前置知识:
- laravel框架基础知识
- event(事件)和listener(监听器);
- middleware(中间件)
- cache
下面是代码实现:
1,首先在app/Providers/EventServiceProvider.php 里添加对应的event和listener。
use Illuminate\Foundation\Http\Events\RequestHandled;
*
*
*
protected $listen = [
RequestHandled::class => [
\App\Listeners\CacheApiResult::class
]
];
然后在项目的根目录执行
php artisan event:generate
这个命令用来生成event文件和listener文件;event用的是框架自带的RequestHandled事件,所以不会有改动,这个命令只会在app/Listeners文件夹下添加一个CacheApiResult.php文件。
文件内容如下
<?php
namespace App\Listeners;
use Cache;
use Illu