From 9a2ca7e18421ea7ecf9f5e8d9fd8ab3dc302716c Mon Sep 17 00:00:00 2001 From: b1ek Date: Fri, 30 Aug 2024 18:18:50 +1000 Subject: [PATCH] feat: cache queries where possible --- .env.example | 2 +- app/Facade/Filters/Filters.php | 5 +++++ app/Http/Requests/AuthorizedRequest.php | 4 +++- app/Services/UserService.php | 8 ++++++-- config/cache.php | 2 +- 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 3caa34e..f5802bd 100644 --- a/.env.example +++ b/.env.example @@ -36,7 +36,7 @@ BROADCAST_CONNECTION=log FILESYSTEM_DISK=local QUEUE_CONNECTION=database -CACHE_STORE=database +CACHE_STORE=redis CACHE_PREFIX= MEMCACHED_HOST=127.0.0.1 diff --git a/app/Facade/Filters/Filters.php b/app/Facade/Filters/Filters.php index be75614..e8b2dcf 100644 --- a/app/Facade/Filters/Filters.php +++ b/app/Facade/Filters/Filters.php @@ -35,6 +35,11 @@ class Filters } } + public function hash(): string + { + return hash('sha256', json_encode($this)); + } + public function apply(Builder $builder) { foreach ($this->filters as $filter) { diff --git a/app/Http/Requests/AuthorizedRequest.php b/app/Http/Requests/AuthorizedRequest.php index 20dcdd5..8daa541 100644 --- a/app/Http/Requests/AuthorizedRequest.php +++ b/app/Http/Requests/AuthorizedRequest.php @@ -9,6 +9,8 @@ class AuthorizedRequest extends RestRequest */ public function authorize(): bool { - return auth()->check(); + return cache()->remember('isSessionAuthorized'.session()->id(), 5, function(){ + return auth()->check(); + }); } } diff --git a/app/Services/UserService.php b/app/Services/UserService.php index ef09b7b..b3094f0 100644 --- a/app/Services/UserService.php +++ b/app/Services/UserService.php @@ -62,12 +62,16 @@ class UserService public function listAll(?Filters $filters = null): array { if (is_null($filters)) { - return User::all()->toArray(); + return cache()->remember('usersListAll', 15, function() { + return User::all()->toArray(); + }); } $builder = User::query(); $filters->apply($builder); - return $builder->get()->toArray(); + return cache()->remember('usersListFilter'.$filters->hash(), 15, function() use ($builder) { + return $builder->get()->toArray(); + }); } public function getOneById(string $id): ?User diff --git a/config/cache.php b/config/cache.php index 925f7d2..4ebabf2 100644 --- a/config/cache.php +++ b/config/cache.php @@ -15,7 +15,7 @@ return [ | */ - 'default' => env('CACHE_STORE', 'database'), + 'default' => env('CACHE_STORE', 'redis'), /* |--------------------------------------------------------------------------