了解Laravel缓存:缓存外观和Redis

时间:2019-11-16 12:35:06

标签: laravel caching redis

我是Laravel的新手。我已经完成了有关该主题的研究,但似乎找不到找到可以解决问题的答案。

我知道Laravel的默认缓存驱动器设置为 file ,可以更改。它还有一些手工缓存命令,例如:

php artisan config:cache
php artisan route:cache

1)即使Laravel具有一些自动处理某些缓存的内置命令和功能(无法确切了解哪些部分),我仍然必须在查询结果上手动使用Cache Facade ,对吧?

它不会自动执行,并且仅在我想更改某些内容时才需要使用Cache门面,对吗?

这是一个教程中的随机示例:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

2)当使用Redis(带有 predis 软件包)作为缓存驱动程序时,我是否需要在以下位置使用Cache外观或Redis外观,或同时使用两者:一些案例?还是可以只在Laravel和服务器(Forge上的Digital Ocean Droplet)中启用Redis,而不做其他事情?

我已经在Laravel文档中使用Cache外观看到了类似的东西:

Cache::store('redis')->put('bar', 'baz', 600);

我还看过使用Redis外观的教程:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

常用:

它们是所有缓存

它们都用来降低时间成本

差异网络:


配置和路由:

它属于应用。我们称之为应用程序缓存

php artisan config:cache
php artisan route:cache

这两个命令是缓存路由和配置。

PATH:

  

它们始终存储在bootstrap/cache/

运行

php artisan config:clear
php artisan route:clear

仅清除bootstrap/cache/中的目录和文件。

它们是静态。因此,只有在更改它们时,它们才会更改。

好处

如果更改它们,则需要手动clearcache

在您配置了这些路由和配置之后。

Laravel 无需再次从文件读取配置和路由,这花费了IO时间。


文件系统缓存和Redis缓存:

文件系统缓存和Redis缓存也是缓存。

但是,他们使用不同的驱动程序来存储数据,即您存储缓存数据的位置

  

文件系统路径:如果您正在使用文件系统驱动程序。它们存储在storage/framework/cache/

中      

Reids PATH:按键值存储在redis中的数据。

什么时候使用它们?

当您发现此代码有很多请求来获取数据时。 这些数据并没有这么快地改变。

您可以使用缓存来存储它们,然后在下次对该API发出另一个请求时使用。 它只是从缓存中获取数据。 如下所示:

$posts = Cache::remember('index.posts', 30, function()
{return Post::with('comments', 'tags', 'author', 'seo')->whereHidden(0)->get();});

第一个请求从数据库中获取帖子的数据,然后将这些数据存储在30秒后过期的缓存(Reids或Filesystem)中。

下一个请求仅通过缓存获取帖子的数据。他们不需要再次在数据库中搜索。

还有一个:

use Illuminate\Support\Facades\Redis; 

Route::get('/', function () { 
     $visits = Redis::incr('visits'); 
     return $visits; 
});

意味着当人们请求localhost:8000/时,用户的访问次数在redis中增加(不需要存储在数据库中,这会花费更多时间), 下次,当请求搜索访问次数时,可以很快在redis中找到它。

  

PS:这里使用Redis Facade,然后将数据存储在redis中。

     

如果您将Redis用作缓存驱动程序,则Cache::remember()也会在Redis中存储数据。

     

但是,使用Redis Facade,您可以使用许多Redis方法。

哪个更好?

我认为redisfilesystem好。

  1. 因为redis将数据存储在内存中,而文件系统存储在磁盘中。 从内存中读取数据比从磁盘中读取数据更快

  2. Redis中的
  3. 操作数据比文件系统更容易。例如,Redis支持清除特定标签的所有缓存,但是文件系统无法[因为文件系统通过加密密钥的名称存储缓存数据]。

  4. 对于分布式服务器,文件系统缓存不是一个好主意。降低缓存命中率。

老实说,还可以选择其他驱动程序,例如mongodb

顺便说一句,我的英语不是很好,希望你能理解。