VIMediaCache icon indicating copy to clipboard operation
VIMediaCache copied to clipboard

支持简单的 Cache 策略

Open bigyelow opened this issue 7 years ago • 5 comments

看了下实现,没有找到哪里支持下面的缓存策略:

  1. 最大缓存 size;
  2. 达到最大缓存限制后的替换策略。

bigyelow avatar May 19 '17 10:05 bigyelow

VICacheManager.h 里面有提供计算缓存大小以及基础的清除缓存的方法。

  1. 这个需求你可以通过计算缓存大小,如果得到的缓存大小超过你的预期就清除。
  2. 这个我想你说的是类似 LRU 的缓存机制,可以根据缓存的使用情况和缓存时间,清除那些老的和不经常使用的缓存。目前优先级比较高的是解决播放上的问题,并且已经有简单的缓存清理,所以对缓存完善上的支持预计没那么快

vitoziv avatar May 23 '17 02:05 vitoziv

对,我说的替换策略就是指的 LRU 或者 FIFO。 有空我提下 pr 吧。

bigyelow avatar May 23 '17 03:05 bigyelow

赞。

如果要实现你想要的策略,我这边的思路是每次使用和保存缓存的时候,需要用 VICacheConfiguration 记录时间,之后通过遍历已缓存的文件的 VICacheConfiguration 信息,然后拿它的时间做比较再去做具体的缓存清理策略。

如果你有更好的策略可以忽略我所说的内容

vitoziv avatar May 23 '17 11:05 vitoziv

嗯,这个功能不是那么紧急,所以你要是有时间也可以先提 pr 哈不用管我。 😆

我想的另一个思路是粒度更粗一点,以文件为单位来清楚缓存,以文件的创建时间/修改时间来作为优先级。每次 finishWritting 的时候才做一次检查和清理,降低频度。 这样可能不用增加 VICacheConfiguration 的职责和功能,实现起来更简单。 这个思路不知道是否合适。

另外,不知道你有使用过 iOS 10 新出的 AVAssetDownloadURLSession 没,这个需要服务端支持 HTTP Live Stream。如果 server 可以很好的支持 HTTP Live Stream,系统提供的方案应该更优。

bigyelow avatar May 23 '17 13:05 bigyelow

如果是已经缓存好的文件,之后再访问的话,也是不会修改的,所以想用修改时间作为判断条件,不知道是否可行。

AVAssetDownloadURLSession 这个多谢分享,看了一下它的用法,应该是不能拿来用的哈。看了它的 API,不能支持从中间开始下载的方式,并且 delegate 里没有回调 data 数据,它只是一个下载器,最后把下载好的数据放到私有 bundle 地址。不能满足 AVAssetResourceLoader 需要不断接收 Data 数据的要求。

vitoziv avatar Jun 05 '17 15:06 vitoziv