【问题标题】:Understanding Laravel caching: Cache facade and Redis了解 Laravel 缓存:缓存外观和 Redis
【发布时间】:2020-03-12 10:03:47
【问题描述】:

我是 Laravel 的新手。我已经对该主题进行了研究,但我似乎无法找到一个可以为我解决问题的答案。

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

php artisan config:cache
php artisan route:cache

1) 即使 Laravel 有一些内置的命令和功能可以自动处理一些缓存(不知道具体是什么部分),我仍然需要在查询结果上手动使用 Cache 门面对吧?

它不会自动完成,如果我想改变什么,我只需要使用缓存门面,对吧?

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

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

2) 当使用Redis(带有predis包)作为缓存驱动时,我需要使用Cache门面,还是Redis门面,或者两者都使用一些案例?或者我可以简单地在 Laravel 和服务器中启用 Redis(Forge 上的 Digital Ocean droplet)而不做任何其他事情吗?

我在 Laravel 文档中看到过类似的东西,使用 Cache 外观:

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

我还看过一个使用 Redis 门面的教程:

use Illuminate\Support\Facades\Redis; 

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

我不知道该怎么做。

【问题讨论】:

    标签: laravel caching redis


    【解决方案1】:

    常见:

    它们都是缓存

    它们都用于减少时间成本

    区别:


    配置和路线:

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

    php artisan config:cache
    php artisan route:cache
    

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

    路径:

    它们始终存储在bootstrap/cache/

    跑步

    php artisan config:clear
    php artisan route:clear
    

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

    它们是静态的。所以只有当你改变它们时它们才会改变。

    好处

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

    在你cahce这些路由和配置之后。

    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();});
    

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

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

    还有这个:

    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 中操作数据比文件系统更容易。例如 Redis 支持清除特定标签的所有缓存,但文件系统不能[因为文件系统通过加密密钥的名称存储缓存数据]。

    3. 对于分布式服务器,文件系统缓存是个坏主意。缓存命中率较低。

    老实说,还有其他驱动可以选择,比如mongodb

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

    【讨论】:

    • 好的,我现在明白我自己必须使用缓存外观,至少在使用“文件”驱动程序的情况下。 Laravel 不会自动做一些魔术。只是为了 100% 清楚 - 如果使用 Redis 作为驱动程序,我是否必须做同样的事情?我是否仍然需要在查询中使用 Cache 或 Redis 外观,就像我的示例中一样?或者它会在服务器端开箱即用?我看了一些关于 Redis 和 Laravel 的 Cloudways 教程,他们只是说在服务器和 Laravel 中启用 Redis,就是这样!这让我觉得我不必在我的代码中做任何其他事情。它只是工作。
    • @RaduB 如果你使用 Redis,你只需要在你的服务器上安装 redis 并运行 redis。然后将您的驱动程序配置从file 更改为redis。然后当你使用缓存方法时,它会自动将数据存储到redis。
    • 好的,我想我现在明白了。即使我将驱动程序更改为 Redis,我仍然需要使用 Cache 或 Redis 外观进行查询。 Cache 门面也可用于在 Redis 中存储数据,但最好使用 Redis 门面,以利用更多与 Redis 相关的方法。谢谢!帮了大忙!
    猜你喜欢
    • 2016-01-14
    • 2018-01-30
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2022-10-20
    • 2023-03-10
    • 2018-02-14
    相关资源
    最近更新 更多