首页 > 覆盖原图之后,长时间不更新

覆盖原图之后,长时间不更新

上传覆盖原图,在web的控制面版里下载的图是最新的,而直接访问的图还是老图,很长时间后,才可以得到新图,是缓存时间的问题吗?

有没有方法可以解决?

另外,当新图可以正常访问之后,通过?imageView的形式访问图片,所得的图片还是旧图片的缩略图,一直没有更新。试了下更改?imageView的参数的话,可以直接看到新图的缩略图,有没有可以 覆盖完图片文件之后直接显示最新的图片的api?


完全赞同@安坚实,类似的也可以参考豆瓣用户头像保存策略。


我也一直碰到这个问题,七牛和又拍都是这样。咨询过七牛的客服,也没有得到解决办法。

我估计,七牛和又拍在设计的时候,就没太考虑图片更新的问题,而是主要关注创建、删除等操作。

所以后来我用了这么个解决办法:

  1. 在创建图片以及每次更新图片前,为其生成一个新的版本号,记录到数据库中。 这个版本号可以是递增的数字,也可以是随机数字/字符
  2. 创建/更新/访问图片时,把这个版本号加到原本的图片名的后面。 例如图片名是 a.jpg,生成的版本号是 373,实际使用的图片名就是 a_v373.jpg
  3. 更新完成后,如果需要,可以把上一个版本的图片删除

有一个实际案例。我做了一个商品管理系统,每个商品有一个图片,这个图片是会经常更新的。
我的数据库就这样设计:

goods
  id       int
  name     varchar(50)
  price    int
  pic_ver  int

生成HTML时就是(伪代码):

for goods in goods_list:
  print '<img src="{goods.name}_v{goods.pic_ver}.jpg" />'

@安坚实 的做法很正确。为了让客户更好的了解我们的缓存机制,我整理了一篇文章,请大家参考并提提建议或者意见:http://kb.qiniu.com/Qiniu-Cloud-Storage-Cache-Strategy

【热门文章】
【热门文章】