考虑以下情况。
我正在使用以下公共端点来获取数据:https://public-crest.eveonline.com/market/prices/
type
下的详细信息存储在数据库中,每天凌晨1点通过laravel任务提取一次。
太好了,那部分完成了。现在让我们假设用户想了解更多关于:
"中型辅助屏蔽助推器"
他们会点击一个链接,该链接对href
进行api调用并获取数据。我会这样做:如果数据库中存在的数据使用该数据,否则进行调用并将其存储在数据库中。
这也很容易。
最困难的部分是:如果数据库没有这些详细信息,或者任务运行一天后,请进行调用。现在,存储信息的表确实有created_at
和updated_at
时间戳,所以我想说:
当用户点击链接查看更多详细信息时,请检查A)项目详细信息在数据库中,好的,现在检查B)是否为24自上次提取数据以来的小时,请通过比较更新时间为24小时前。
这是正确的方法吗?
自过期数据通常存储在缓存中(例如memcached)。我认为你这样做会更理性:
$content = Cache::remember('page' . $href, 1440, function() {
return $this->fetchPage($href);
});
其中fetchPage()是一个在$href处获取页面的假想方法。因此,如果有人在24小时内请求相同的URL,将使用缓存值。无需在数据库中填充过期过快的值并进行清理。