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 每天刷新缓存。