Azure API Management 请求超过9/10MB时无法写入Azure Redis Cache 的技术求助
解决Azure API Management与Redis集成时大响应缓存写入失败的问题
根据你的描述,这个问题的核心是Azure API Management(APIM)本身对缓存响应的大小存在内置限制,而非Redis的问题——毕竟你已经验证过直接向Redis写入50MB数据是正常的。下面来拆解原因并给出具体的解决方法:
问题原因分析
APIM针对缓存响应的大小有默认限制,且会根据你设置的downstream-caching-type参数触发不同的阈值:
- 当
downstream-caching-type="public"时,APIM遵循HTTP缓存规范,默认的缓存响应大小上限约为10MB,这就是为什么9MB以内的请求能正常缓存,超过后失败; - 当
downstream-caching-type="none"时,APIM使用内部缓存的默认限制(2MB),所以即使是9MB的请求也无法缓存。
这些限制是APIM层面的配置,和Redis的容量无关。
解决方案:调整APIM的缓存响应大小限制
要解决这个问题,你需要修改APIM实例的全局缓存响应大小限制,具体可以通过Azure CLI或者ARM模板来操作:
方法1:使用Azure CLI修改
执行以下命令,将响应大小限制调整为你需要的数值(示例中设置为50MB,即52428800字节):
az apim update --name <你的APIM实例名称> --resource-group <你的资源组名称> --set properties.cache.responseSizeLimit=52428800
方法2:使用ARM模板修改
在你的APIM ARM模板中,添加或更新properties.cache.responseSizeLimit属性:
{ "type": "Microsoft.ApiManagement/service", "apiVersion": "2023-03-01-preview", "name": "[parameters('apiManagementServiceName')]", "location": "[parameters('location')]", "properties": { // 其他APIM配置... "cache": { "responseSizeLimit": 52428800 // 50MB,根据你的需求调整 } } }
更新模板后,部署到Azure即可生效。
验证与注意事项
- 生效时间:修改完成后,APIM实例需要几分钟的时间来更新配置,建议等待5-10分钟后再测试;
- Redis兼容性:确保你设置的上限不超过Redis的最大键值大小(Redis默认允许的最大键值是512MB,所以50MB完全没问题);
- APIM全局限制:同时确认APIM实例的全局请求/响应大小限制(在APIM门户的“设置”>“限制”中)也大于你要缓存的响应大小,避免其他层面的拦截;
- 策略确认:保持你现有的
cache-lookup和cache-store策略配置不变,确保caching-type="external"正确指向你的Redis实例。
按照以上步骤调整后,应该就能正常缓存超过10MB的响应了。
内容的提问来源于stack exchange,提问作者leeodrift
相关产品推荐
相关产品推荐

