我正在从文档http://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html
中读取Amazon S3数据一致性Amazon S3为新的PUTS提供了读写后一致性 所有区域中的S3存储桶中的对象都有一个警告。警告 如果您对密钥名称发出HEAD或GET请求(以查找是否为 在创建对象之前,对象存在,Amazon S3提供 写后读的最终一致性。
据我所知,Amazon S3在将新对象放入S3存储桶时提供了一致写入一致性。但是在创建对象之前我没有完全理解HEAD和GET请求,这意味着什么?
答案 0 :(得分:6)
S3的实际内部结构是AWS专有的,但这是一个理论:
当你请求一个对象时,它会进入它的缓存以查看它是否存在。
1)如果它不在缓存中,它会从底层存储中提取数据并将其放入缓存中。
这是写后读写的一致性。您将立即获得新版本。
2)如果它已经在缓存中,则返回数据。
这是更新的写入后写入的最终一致性。您更新对象,然后缓存版本必须在获得新版本之前到期。
3)如果它不在缓存中,并且该对象不存在,则缓存"不存在"结果
这是您要问的行为。就像缓存中的旧数据一样,S3已缓存"密钥不存在"作为"旧数据"。因此,您必须等待缓存过期,然后才能返回实际数据。
同样,任何权威都没有说明这一点。我欢迎任何S3专家纠正或质疑我可能遇到的任何错误。