ios 刷新头像_想请问各位大大,iOS中新旧头像缓存的策略是什么?如微信,每次更换个人头像后,服务器怎么处理新旧头像?...

新旧头像如何处理,需要考虑服务端和客户端两个方面。

通常大公司会将文件上传做成基础服务,跟特定的应用无关。假设这里,文件上传为服务 A, 特定的应用为服务 B,客户端为 C。这时候替换头像大致有两种做法:C 将图片数据上传到 A, 返回一个 url。之后 C 将 url 传给 B。

C 将图片数据上传到 B。而 B 在实现过程当中,调用 A 服务。我倾向于选择 2 的做法,更灵活一些。

有了文件上传这种基础服务,特定应用就不会直接跟文件系统打交道。如何备份,如何容错、CDN 之类的东西都不需要考虑。假如没有这种服务,特定应用 B 可以自己读写文件。服务器端有两种做法,一是有新头像时,保留旧头像。一是有新头像时,删除旧头像。假如保留旧头像,就可以实现头像的历史记录。根据实际情况选择。

最终客户端得到头像图片的 url。

客户端通过 url 下载了图片,通常会缓存图片,使用 url 作为缓存的 key。(这里 url 可以编码成 md5, 只要能通过 url 可以定位到缓存数据就行)。

用户替换了头像之后,客户端的缓存什么时候更新呢?最简单的办法是,每一次替换头像之后,url 都是不同的。这样客户端就没有这条 url 的缓存,之后通过网络获取重新得到头像图片,自然就更新了。那么旧的头像缓存何时删除呢?最简单的办法是不用删除,而提供一个清除缓存的按钮让用户手动删除。

这样下一个问题是如何让每一次替换头像,返回的 url 都是不同的?假如是调用文件上传服务器,不用考虑这个问题,它返回的 url 就是唯一的。假如是自己读写文件,一种方法是每一次都生成一个 uuid, 将 uuid 作为文件名。也可以将图片数据的 md5 值作为文件名。这样返回的 url 样子为:

https://example/heads/0b0d5c01df0d4c36a6334efd7a98b162.jpg

也可以取当前时间值作为 url 的一部分,url 大致为

https://example/123456789/head.jpg?timestamp=1485701510261

这样在服务器读写文件时候,就自然直接删除了旧的头像文件。

总结:最简单的做法是让替换头像后,返回的 url 跟之前的不同。客户端的头像缓存自然得到更新,之后客户端可以判断当前磁盘的剩余容量,当容量太小的时候,就弹出一个对话框,让用户手动删除缓存。在 iOS 中,假如将缓存放在 Caches 目录,有时系统也会自动清除。客户端的缓存也可以设置一个过期时间。开源的缓存库中,过期时间,统计剩余容量,这些繁琐的杂事应该已经帮你做了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值