首页 > 解决方案 > 原子部署期间的 Doctrine 元数据缓存

问题描述

在应用程序部署期间如何处理 Doctrine 的元数据缓存?

应用程序使用原子部署策略。到目前为止,我们使用的默认缓存方法效果很好。然而,出于性能原因,我们希望切换到像 Redis/Memcached 这样的内存缓存。file

我们应该为每个版本使用某种缓存 ID 前缀吗?例如,当发布新版本的软件时,部署脚本会预热应用程序并用新的模式元数据填充缓存。如果部署失败,我们会进行回滚,元数据缓存仍然有效。

解决这个问题的最佳方法是什么?当第一个请求进来并且还没有元数据缓存时,我想避免 CPU 峰值。

标签: phpsymfonycachingdeploymentdoctrine

解决方案


我们应该为每个版本使用某种缓存 ID 前缀吗?

是的,这是我多次使用的方法。一旦代码在服务器上,供应商就安装好了,就在进行切换之前,使用唯一的前缀预热缓存。回滚将使用部署之前使用的缓存。

设置前缀可能很棘手,并且取决于您的环境。您的应用程序可能会从一些只包含唯一版本标识符的版本文件中读取。您的部署可能会创建它。一种选择是使用当前 HEAD 的 git 哈希(或者如果您正在标记版本,则使用标记)。避免依赖开发人员手动修改版本。

请记住,这种方法需要格外小心,以免填满您选择的缓存解决方案的存储空间。需要考虑的一些技术:

  • 缓存条目应该有一个生命周期(例如,使用 Redis,确保条目过期)
  • 从服务器中删除旧版本时,还应清除其缓存。

推荐阅读