【问题标题】:Remove the Symfony cache folder - for stateless horizontal scaling删除 Symfony 缓存文件夹 - 用于无状态水平扩展
【发布时间】:2019-07-15 12:18:48
【问题描述】:

我想知道是否可以将 Symfony 应用程序的所有缓存数据保存在像 AWS ElastiCache 这样的 Redis 容器中。

我了解了您可以在框架中选择的 RedisAdapter:

cache:    
     app: cache.adapter.redis
     default_redis_provider: "redis://%env(REDIS_HOST)%:%env(REDIS_PORT)%"

如果您想在 Redis 缓存中保存和读取数据,则该方法有效。

但是 Symfony 的其余数据无论如何都存储在缓存目录中。有没有可能让 Symfony 完全无状态?

【问题讨论】:

  • 您是否也尝试将app.system 设置为您的redis 适配器?如果我没记错的话,它应该用于缓存注释、翻译等,基本上是 Symfony 存储在 var/cache 中的所有内容。您可能还需要更改 Doctrine 缓存和您拥有的任何其他 3rd 方缓存。
  • 好的,听起来不错。你能举例说明如何将 app.system 设置为 Redis 适配器吗?
  • 只需在framework: cache: system: cache.adapter.redis 下添加另一个条目,如app: cache.adapter.redis,仅使用键system。 :)

标签: symfony caching redis stateless horizontal-scaling


【解决方案1】:

您可以在相同的配置中更改系统缓存:

framework:
    cache:
        app: cache.adapter.redis
        system: cache.adapter.redis
        default_redis_provider: "redis://%env(REDIS_HOST)%:%env(REDIS_PORT)%"

这应该在 Redis 中存储所有与框架相关的缓存,如翻译、模板、编译注释等。您可能还需要更改其他与应用相关的缓存,例如 Doctrine 和其他 3rd 方工具。

您可能还想查看Chain Adapter,它保存了所有链式适配器中的所有条目,但会从头到尾逐个获取它们,这使其成为提供后备的好方法,以防您的 Redis 集群停机或当您遇到一些停机时间时。如果您使用基于 Docker 的设置,您应该能够在构建期间预热所有缓存,然后 Symfony 不需要编写任何新缓存,从而可以轻松启动新实例,即使您不使用Redis 缓存或者链式使用。

【讨论】:

  • 好的,谢谢。这也意味着,除非我在部署之前预热我的应用程序,否则我不一定需要这种无状态缓存?而且......如果我需要它 - 是否有我必须用链适配器捕获的东西的列表?
  • 是的,你可以预先建立缓存,它不应该改变。链适配器没有什么特别之处。您只需将其他缓存作为参数添加到构造函数,然后在缓存配置中引用它而不是 redis 适配器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 2016-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多