kna*_*ada 0 caching amazon-web-services aws-api-gateway
更新:我想通了,请参阅下面的回答帖子。
我有一个 AWS API Gateway api,定义了各种资源和各种 GET 和 POST 方法。
一切正常。POST 正在通过。GET 返回一个响应(JSON 负载),但返回的值似乎是一个缓存值。
我的 GET api 调用了一个向 RDS 调用查询的 Lambda 函数。我可以确认我的回答是陈旧的,因为:
它确实刷新了一次,但我认为那是因为我超过了一些(如 1 小时)缓存阈值或其他什么。
我了解 API Gateway 在幕后生成 CloudFront。我觉得这就是缓存的作用。但这只是猜测,我没有证据。也许某种默认缓存TTL?
我显然在 API Gateway 阶段关闭了缓存。我什至尝试启用它,将 TTL 设置为 1,刷新缓存,然后再次禁用缓存。该测试的每个阶段仍然返回陈旧的值。
我不知道它是否相关,但更多细节:
我是否应该传递一些标头来请求未缓存的值?我去了 CloudFront,但这里没有配置。
API Gateway 缓存上的所有其他帖子似乎都是关于缓存不起作用或人们询问缓存键的特殊性。无论如何,我都没有看到任何关于总是被缓存的值。所以我觉得我错过了一些明显的东西......
任何帮助或调试技巧将不胜感激!
好的,所以我觉得回答我自己的问题是个白痴,但希望有一天能对某人有所帮助。
这不是 API 网关缓存问题。问题是 pymysql 连接和 lambda 会话缓存问题。
我的 Lambda 使用 pymysql 来查询 MySQL RDS。根据推荐的性能原因,我在 lambdas 之间重用了连接(这意味着我没有每次都关闭连接)。
解决方案是调用
conn.commit()
在我完成 fetchall() 之后
发生的事情是我随后的调用返回了一个缓存的查询结果(称为一致读取。谢谢!@Michael - sqlbot)我相信我可能有多个 lambda 容器或其他东西,所以当我有一段时间不活动时(即忙碌)阅读 stackoverflow 帖子),lambda 将卸载。然后我的下一个 API 网关尝试将重新初始化一个新的 lambda 处理程序并创建一个分支新连接(没有缓存)。所以这就是为什么它似乎“有时工作,然后停止”。
如果我浪费了任何人的时间,我深表歉意。
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |