如何让AppSync在缓存时尊重字段选择规则?
AppSync 缓存对不同字段查询的响应行为
这是AppSync缓存机制里一个很典型的行为,我来给你拆解清楚整个逻辑:
第一步:首次查询与缓存写入
当你发送仅请求field1的GraphQL查询:{ todoItems { field1 } }AppSync会调用你的Lambda数据源获取对应数据,得到响应后将这个完整结果存入缓存:
{ "todoItems": [ { "field1": "some data" } ] }第二步:缓存有效期内的新增字段查询
在缓存还没过期时,如果你发送包含field1和field2的查询:{ todoItems { field1 field2 } }AppSync会直接命中之前的缓存,不会重新调用Lambda。由于缓存的响应里并没有
field2的数据,AppSync会自动将这个缺失的字段填充为null,最终返回的结果就是:{ "todoItems": [ { "field1": "some data", "field2": null } ] }第三步:缓存过期后的查询
等缓存过期后再发送包含field2的查询,AppSync会重新触发Lambda获取完整的数据集,这时就能返回包含正确field2值的结果了:{ "todoItems": [ { "field1": "some data", "field2": "other data" } ] }
核心要点:AppSync的缓存命中逻辑默认是基于查询的唯一标识(包括操作名称、变量等),如果你的缓存键配置没有把字段选择纳入考量,那么即使后续查询的字段不同,也会命中同一缓存条目,导致缺失字段被填充为null,直到缓存失效才会拉取最新的完整数据。
内容的提问来源于stack exchange,提问作者Vitalii Kyktov
相关产品推荐
相关产品推荐

