mur*_*rph 6 caching laravel laravel-5
我是一名新开发人员,正在尝试实施Laravel(5.1)缓存工具以提高我的应用程序的速度.我开始缓存一个我的应用程序不断引用的大型数据库表 - 但它太大了所以我已经退出了这个并且现在'永远'缓存了较小的数据块 - 例如,对于每个页面只有那些大的部分数据库表是相关的.
我在Laracasts上看过'Caching Essentials',做了一些谷歌搜索并在这个论坛(和Laracasts')进行了搜索,但我仍然有几个问题:
当您使用Laravel基于文件的系统时,我并不完全清楚缓存大小限制是如何工作的 - 是否存在缓存的整体应用程序内大小限制,或者只有每个密钥和服务器大小的有限大小限制?
您应该从基于文件的缓存切换到Memcached或Redis等标志,以及使用其中一种服务有哪些好处?事实上你的缓存是在不同的服务器上处理的(从而减轻了你自己的负担)吗?当您的本地基于文件的缓存对于您的服务器来说太大时,您是否切换到这些服务之一?
我的应用程序使用了几个包含3,000-4,000行的表 - 这些表中的数据会不断被引用,并且除非我决定添加新选项,否则它将保持静态.我基本上是在寻找加快查询这些表中数据的最佳方法.
谢谢!
我认为Laravel根本不对其文件i/o施加任何限制 - 限制将取决于PHP可以一次读取/写入文件的程度,或者在任何时候保存在其内存/进程中.
它会对您缓存的数据进行序列化,并在重新加载时对其进行反序列化,因此您的PHP环境必须能够立即处理整个缓存文件(相当于顶级缓存键).所以,如果你得到了cacheduser.firstname,它必须cacheduser从文件加载整个密钥,取消序列化,然后从中获取firstname密钥.
我会把PHP内存限制(经典,我知道!)作为调查你是否想要坚持这条道路的第一点.
像Redis或memcached这样的缓存服务是定制的优化缓存解决方案.他们从PHP环境中获取一些逻辑和责任.
例如,他们可以从项目中检索子密钥而无需处理整个事物,因此可以以内存有效的方式检索部分缓存数据.因此,当您cacheduser.firstname从redis 请求时,它只返回firstname属性.
它们在标记/清除缓存子集方面还有其他优点(参见[缓存标签Laravel docs](https://laravel.com/docs/5.4/cache#cache-tags))
另外需要考虑的是扩展.如果您的站点足够大,并且在多个服务器之间进行负载平衡,那么这些服务器之间的文件系统缓存可能会有所不同,因为每个服务器只能检查其本地文件系统中的缓存文件.缓存服务可以位于不同的服务器上(许多主机将具有单独的redis/memcached服务),因此不是此问题的受害者.
另外 - 据我所知(这可能是最重要的事情),Laravel中的文件缓存驱动程序主要用于本地开发和测试.虽然它对于具有基本缓存需求的简单应用程序可以正常工作,但它并不适用于大型可扩展生产环境.
就个人而言,我在本地开发并使用文件缓存进行测试,因为我只处理少量数据,并使用redis缓存在生产环境中.
它不一定需要在单独的服务器上才能获得好处.如果您永远不会扩展到多个应用程序服务器,那么在同一服务器上使用缓存服务对于缓存大型文档已经是一个很大的改进.
| 归档时间: |
|
| 查看次数: |
2170 次 |
| 最近记录: |