2014-11-13 2 views
0

Я работаю над сайтом электронной коммерции, на каждой странице этого сайта есть этот заголовок, содержащий информацию о корзине покупок, поэтому каждый раз, когда страница с этим заголовком, в которой загружена корзина, загружается в базу данных удар. Интересно, могу ли я использовать технологию кэширования базы данных для сокращения времени запроса? Например, если ничего не изменилось, то не извлекайте данные из базы данных, если в корзину не добавлены новые продукты (ы)?Кэш базы данных Laravel

ответ

2

Уверен, что это возможно, но это звучит как плохая идея, и я отменяю ее, потому что кэш используется совместно со всем приложением, а информация о корзине связана с одним пользователем. Для такого рода пользовательской информации лучше использовать куки или сеанс.

В любом случае, здесь у вас есть. Вы не представили образец кода, поэтому я составил нечто общее. Хитрость заключается в том, чтобы добавить к ключу кеша что-то, что делает его уникальным для каждого пользователя (например, первичный ключ модели), и после добавления/удаления продукта в корзину из ящика очистит кеш с использованием предыдущего ключа кеша.

// Code to get current user shopping cart (The one that will be shown in your header) 
$cart = Cart::where('user_id', $user_id = Auth::user()->getKey())->remember(60*2, "cartOfUser$user_id")->get(); 

// Code that adds a product to the cart 
Cart:addProduct($product, $qty) and Cache::forget('cartOfUser' . Auth::user()->getKey()); 

Советуем не переустраивать сейчас. Я уверен, что запрос базы данных корзины не имеет большого значения. Завершите свое приложение, отполируйте его, и когда все работает как ожидалось, запустите профилировщик, чтобы найти узкие места, а затем оптимизировать.

+0

Да, взятый пункт, я согласен с тем, что запрос базы данных кэш-памяти для стольких разных пользователей - плохая идея. – dulan

Смежные вопросы