2016-01-07 1 views
0

рассмотрите следующую ситуацию.Извлечь один раз в день laravel 5.2

Я использую следующую публичные конечную точку для извлечения данных: https://public-crest.eveonline.com/market/prices/

Деталь под type хранится в базе данных, то выбирается один раз в день на 1 час с помощью задачи Laravel.

Отлично, что-то сделано. Теперь давайте говорить пользователь хочет узнать больше:

«Medium Shield Booster Вспомогательные»

Они нажмите на ссылку, которая делает АНИ вызов к href и извлекает эти данные. Я бы сделал так, чтобы: если данные существуют в базе данных, используйте это, иначе сделайте вызов и сохраните его в базе данных.

это детали простой тоже.

Жесткая часть говорит: сделайте вызов, если база данных не имеет этих данных, или она была на один день с момента запуска задачи. Теперь таблица, в которой хранится информация действительно имеет created_at и updated_at отметки времени, так бы я сказал:

Когда пользователь нажимает на ссылку, чтобы просмотреть более подробную информацию, проверьте, если A) пункт детали находятся в базе данных, в порядке их теперь проверяем B), если это было 24 часов с момента последнего получения данных, сделайте это, сравнив , обновленный на 24 часа назад.

Это правильный способ сделать это?

+0

Да, почему бы и нет ?, любым способом вы можете запустить запланированное задание, которое будет запрашивать api каждые 24 часа, чтобы вы могли сказать, что если элемент находится в db, чем его свежий –

ответ

0

Самостоятельные данные обычно хранятся в кеше (например, memcached). Я думаю, что это будет путь более рациональным для Вас, чтобы сделать что-то вроде этого:

$content = Cache::remember('page' . $href, 1440, function() { 
    return $this->fetchPage($href); 
}); 

Где fetchPage() представляет собой воображаемый метод, который получает страницу в $ HREF. Поэтому, если кто-то запрашивает один и тот же URL в течение 24 часов, будет использоваться кешированное значение. Не нужно заполнять вашу базу данных значениями, срок действия которых истекает так быстро и позаботиться о чистке.