insert(self::redisListToArray($userVisitMenuLogsL1)); self::switchL1ToL2(); } catch (\Exception $e) { return; } } /** * @param Request $request */ public static function set(Request $request): void { $uri = substr($request->getRequestUri(), 1); // 请求方法为get if ($request->method() == 'GET') { $menu = Menu::query()->where('route', $uri)->first(); if ($menu) { //redis正常保存在缓存中 $date = date('Y-m-d H:i:s'); $userVisitMenuLog = new UserVisitMenuLog([ 'user_id' => Auth::user()['id'], 'menu_id' => $menu->id, 'created_at' => $date, 'updated_at' => $date, ]); try { //菜单点击入缓存 Redis::LPUSH('UserVisitMenuLogsL1', $userVisitMenuLog); } catch (\Exception $e) { //连接不上缓存。直接入库 $userVisitMenuLog->save(); } } } } /** * 将缓存中的数据拿出保存,转换为数组,方便数据库保存 * @param $userVisitMenuLogsStr * @return array */ public static function redisListToArray($userVisitMenuLogsStr): array { $userVisitMenuLogsArr = []; foreach ($userVisitMenuLogsStr as $userVisitMenuLog) { $userVisitMenuLogObj = json_decode($userVisitMenuLog); $userVisitMenuLogsArr[] = [ 'user_id' => $userVisitMenuLogObj->user_id, 'menu_id' => $userVisitMenuLogObj->menu_id, 'created_at' => $userVisitMenuLogObj->created_at, 'updated_at' => $userVisitMenuLogObj->updated_at, ]; } return $userVisitMenuLogsArr; } /** *将L1缓存转移到L2 */ public static function switchL1ToL2(): void { while (Redis::LLEN('UserVisitMenuLogsL1') > 0) { Redis::LPUSH('UserVisitMenuLogsL2', Redis::LPOP('UserVisitMenuLogsL1')); } } }