今日给 PHPHub 开发了记录用户「最后活跃时间」的小功能,现在趁着热乎将相关实现逻辑写出来,欢迎大家指出不足。
基本思路#
通过 Middleware 捕获用户的所有请求;
记录用户的请求时间,将数据放入缓存 (Redis) 中;
通过 Cron 每十分钟将缓存 (Redis) 里的数据同步到数据库中;
读取数据:先从 Redis 中读取数据,如 Redis 中没有,则从数据库中获取数据并同步到 Redis 中。
下文中我将针对每一个步骤进行详细说明。
捕获用户的所有请求#
只有捕获用户的所有请求,我们才能实时的记录用户的最后活跃时间。在这里我们通过 中间件 来实现此逻辑。以下是生成中间件的具体操作:
1). 运行以下命令,生成 RecordLastActivedTime 中间件。
php artisan make:middleware RecordLastActivedTime
2). 在 app/Http/Kernel.php 中添加以下配置,将 RecordLastActivedTime 设置为全局中间件。
protected $middleware = [
...
\App\Http\Middleware\RecordLastActivedTime::class,];
3). 在 app\Http\Middleware\RecordLastActivedTime.php 文件中添加逻辑代码
...use Closure;use Auth;class RecordLastActivedTime{
public function handle($request, Closure $next)
{
if (Auth::check()) {
Auth::user()-
|