Laravel基于文件的缓存的大小限制是多少?

时间:2015-11-08 19:45:43

标签: laravel caching laravel-5.1

我是一名新开发人员,正在尝试实施Laravel(5.1)缓存工具,以提高我的应用程序的速度。我开始缓存一个我的应用程序不断引用的大型数据库表 - 但它太大了所以我已经退出了这个并且现在'永远'缓存了较小的数据块 - 例如,对于每个页面只有那些大的部分数据库表是相关的。

我在Laracasts上看过'Caching Essentials',做了一些谷歌搜索并在这个论坛(和Laracasts')进行了搜索,但我还有几个问题:

  1. 当您使用Laravel基于文件的系统时,我并不完全清楚缓存大小限制的工作原理 - 是否存在缓存的整体应用内大小限制,或者只有每个密钥的有限大小限制以及您的服务器大小?

  2. 您应该从基于文件的缓存切换到Memcached或Redis之类的标志 - 使用其中一种服务有哪些好处?事实上你的缓存是在不同的服务器上处理的(从而减轻了你自己的负担)吗?当您的本地基于文件的缓存对于服务器来说太大时,您是否切换到其中一个服务?

  3. 我的应用程序使用了几个包含3,000-4,000行的表 - 这些表中的数据会不断被引用,并且除非我决定添加新选项,否则它将保持静态。我基本上是在寻找加快查询这些表中数据的最佳方法。

    谢谢!

1 个答案:

答案 0 :(得分:5)

  1. 我认为Laravel根本不对其文件i / o施加任何限制 - 限制将取决于PHP可以一次读取/写入文件的数量,或者保留在其内存/进程中的数量在任何时候 它会对您缓存的数据进行序列化,并在重新加载时对其进行反序列化,因此您的PHP环境必须能够立即处理整个缓存文件(相当于顶级缓存键)。因此,如果您收到cacheduser.firstname,则必须从文件中加载整个cacheduser密钥,对其进行反序列化,然后从中获取firstname密钥。
    我会把PHP内存限制(经典,我知道!)作为调查你是否想要坚持这条道路的第一点。

  2. Redis或memcached等缓存服务是定制的优化缓存解决方案。他们从PHP环境中学习了一些逻辑和责任 例如,他们可以从项目中检索子密钥而无需处理整个事物,因此可以以内存有效的方式检索部分缓存数据。因此,当您从redis请求cacheduser.firstname时,它只会返回firstname属性 它们在标记/清除缓存子集方面还有其他优点(参见[缓存标记Laravel docs](https://laravel.com/docs/5.4/cache#cache-tags)) 要考虑的另一件事是缩放。如果您的站点足够大,并且在多个服务器之间进行负载平衡,则这些服务器之间的文件系统缓存可能会有所不同,因为每个服务器只能检查其本地文件系统中的缓存文件。缓存服务可以位于不同的服务器上(许多主机将提供单独的redis / memcached服务),因此不是此问题的受害者。
    另外 - 据我所知(这可能是最重要的事情),Laravel中的文件缓存驱动程序主要用于本地开发和测试。虽然它对于具有基本缓存需求的简单应用程序可以正常工作,但它不适用于大型可扩展生产环境。

  3. 就个人而言,我在本地开发并使用文件缓存进行测试,因为我只处理少量数据,并使用redis在生产环境中进行缓存。

    它不一定需要在单独的服务器上才能获得好处。如果您永远不会扩展到多个应用程序服务器,那么在同一服务器上使用缓存服务对于缓存大型文档已经是一个很大的改进。