在Java中刷新资源的ETag
我有一个与S3集成的API,用于上传/下载资源 我可以成功地检索和缓存每个资源的ETag 它们存储为HashMap,其中键是资源的ID(确切地说是UUID),值是amazons3返回的ETag 例如,我有一个我的一个实体的徽标,用户可以在他们认为合适的时候更新它 在我看来,刷新etag缓存应该在PUT请求中发生,只需更新HashMap中的条目即可 在Java中,这是正确的方法吗 我在每个GET请求的开头运行这段代码在Java中刷新资源的ETag,java,amazon-s3,etag,spark-java,Java,Amazon S3,Etag,Spark Java,我有一个与S3集成的API,用于上传/下载资源 我可以成功地检索和缓存每个资源的ETag 它们存储为HashMap,其中键是资源的ID(确切地说是UUID),值是amazons3返回的ETag 例如,我有一个我的一个实体的徽标,用户可以在他们认为合适的时候更新它 在我看来,刷新etag缓存应该在PUT请求中发生,只需更新HashMap中的条目即可 在Java中,这是正确的方法吗 我在每个GET请求的开头运行这段代码 private void validateETag(UUID id, Reque
private void validateETag(UUID id, Request rq, Response rs) {
String eTag = rq.headers("If-None-Match");
String cachedETag = etagCache.get(id);
if (eTag != null && cachedETag != null && eTag.equals(cachedETag)) {
rs.header("Cache-Control", "max-age=60");
rs.header(ETAG_KEY, eTag);
halt(304);
}
}
您可以将缓存的ETag ID与缓存对象本身一起更新。由于您必须处理丢失的本地缓存对象,因此在创建缓存对象之前或之后执行此操作并不重要,但我想在创建缓存对象之后会产生较少的回迁。因此,我正确地认为,最好的做法是对资源的PUT请求?我刚才说的是本地缓存,即生成临时文件的位置。这取决于谁更新S3和谁下载S3。如果推送数据,可以生成一个新的缓存条目,将其放入,然后更新本地etag。在所有情况下,你都有比赛。