Я использую Redis в качестве слоя кеширования и хотел бы знать, что лучше всего использовать вместе с DB (в данном случае MySQL).
Здесь у меня есть пример функции панели управления пользователя:
public function updateDashboardUser(Request $request) {
$user = app('redis')->hGetAll($request->userID); //Get data from cache
if ($user) { //if there is data use this
$id = $user['id'];
$name = $user['name'];
} else { //otherwise use this
$user = User::select('id', 'name')->where('id', '=', $request->userID)->first();
$id = $user->id;
$name = $user->name;
}
return response()->json(['id' => $id, 'name' => $name], 200);
}
Однако этот оператор else никогда не достигается, хотя $user
из кеша может быть пустым. Есть ли лучший способ сделать это?
Также при обновлении ... Есть ли лучший способ автоматически обновлять оба (кеш и БД) при изменении данных в одном из них.
public function editDashboard(Request $request) {
$user = Route::find($request->userID);
$user->name = $request->name;
$user->save();
$cacheEdit = app('redis')->hSet($user->id, 'name', $request->name);
return response()->json(['status' => '200'], 200);
}
На данный момент я делаю это так, но иногда может быть изменен только один из них, а затем данные кеша (или, наоборот, данные БД) не синхронизируются / не обновляются.
Это мой первый опыт с Redis и кешированием в целом, поэтому приветствуется любая помощь.