php - 原子部署期间的 Doctrine 元数据缓存
问题描述
在应用程序部署期间如何处理 Doctrine 的元数据缓存?
我们对symfony应用程序使用原子部署策略。到目前为止,我们使用的默认缓存方法效果很好。然而,出于性能原因,我们希望切换到像 Redis/Memcached 这样的内存缓存。file
我们应该为每个版本使用某种缓存 ID 前缀吗?例如,当发布新版本的软件时,部署脚本会预热应用程序并用新的模式元数据填充缓存。如果部署失败,我们会进行回滚,元数据缓存仍然有效。
解决这个问题的最佳方法是什么?当第一个请求进来并且还没有元数据缓存时,我想避免 CPU 峰值。
解决方案
我们应该为每个版本使用某种缓存 ID 前缀吗?
是的,这是我多次使用的方法。一旦代码在服务器上,供应商就安装好了,就在进行切换之前,使用唯一的前缀预热缓存。回滚将使用部署之前使用的缓存。
设置前缀可能很棘手,并且取决于您的环境。您的应用程序可能会从一些只包含唯一版本标识符的版本文件中读取。您的部署可能会创建它。一种选择是使用当前 HEAD 的 git 哈希(或者如果您正在标记版本,则使用标记)。避免依赖开发人员手动修改版本。
请记住,这种方法需要格外小心,以免填满您选择的缓存解决方案的存储空间。需要考虑的一些技术:
- 缓存条目应该有一个生命周期(例如,使用 Redis,确保条目过期)
- 从服务器中删除旧版本时,还应清除其缓存。
推荐阅读
- arrays - Swift 中的罗马数字转换器
- python - 从python中的csv文件中的推文中删除不需要的单词(字符)
- c# - 如何将 RAML 文件导入项目?
- python - 使用干净和退化的照片训练深度学习模型
- windows - Git Bash - 当我尝试使用纱线运行所有测试时,它没有显示任何结果
- excel - 在 Excel/VBA 中使用 CountIF 和 01.03.1900 之前的日期
- reactjs - React-Router 解析错误:意外的令牌
- python - 熊猫:在掩蔽时描述单个列
- angular - 成功登录后显示登录的用户名不更新Angular 8中的div
- android - Cloud Firestore:从 API 添加和更新数据