Laravel 缓存
Laravel Caching
我有这个功能可以检索网站所有 url 的页面标题:
function getTitle($url)
{
$pages = file_get_contents($url);
$title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $pages, $match) ? $match[1] : null;
return $title;
}
然后我做了一个循环,它完美地工作 (Good Results),但我想为 'file_get_contents' 使用缓存,所以我做了:
function getTitle($url)
{
$pages = cache()->Cache::remember('key', now()->addDay(), fn() => file_get_contents($url));
$title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $pages, $match) ? $match[1] : null;
return $title;
}
一方面缓存有效(现在超快)但另一方面,所有标题都是相同的 (Bad Results)。
我的逻辑错在哪里?这是我第一次使用缓存。
该文件依赖于 $url,而您独立于它缓存 file_get_contents
,因此无论 $url 值如何,都使用相同的缓存。
使缓存依赖于 url。但不知道是不是你要的性能升级
$pages = cache()->Cache::remember('key-'.$url, now()->addDay(), fn() => file_get_contents($url))
您应该让缓存持续更长时间并在创建或修改时刷新,或者让 cron 每天刷新缓存。
我有这个功能可以检索网站所有 url 的页面标题:
function getTitle($url)
{
$pages = file_get_contents($url);
$title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $pages, $match) ? $match[1] : null;
return $title;
}
然后我做了一个循环,它完美地工作 (Good Results),但我想为 'file_get_contents' 使用缓存,所以我做了:
function getTitle($url)
{
$pages = cache()->Cache::remember('key', now()->addDay(), fn() => file_get_contents($url));
$title = preg_match('/<title[^>]*>(.*?)<\/title>/ims', $pages, $match) ? $match[1] : null;
return $title;
}
一方面缓存有效(现在超快)但另一方面,所有标题都是相同的 (Bad Results)。
我的逻辑错在哪里?这是我第一次使用缓存。
该文件依赖于 $url,而您独立于它缓存 file_get_contents
,因此无论 $url 值如何,都使用相同的缓存。
使缓存依赖于 url。但不知道是不是你要的性能升级
$pages = cache()->Cache::remember('key-'.$url, now()->addDay(), fn() => file_get_contents($url))
您应该让缓存持续更长时间并在创建或修改时刷新,或者让 cron 每天刷新缓存。