ibireme / YYCache

High performance cache framework for iOS.
MIT License
2.37k stars 505 forks source link

能单独设置每个缓存的存活时间吗? #21

Open hongdong opened 8 years ago

hongdong commented 8 years ago

能单独设置每个缓存的存活时间吗?

ibireme commented 8 years ago

目前不行。 磁盘缓存实现这个功能还是比较容易的,但内存缓存就有问题了。一方面,内存缓存需要做额外检查,会降低性能;另一方面,iOS 里内存缓存应该在收到内存警告时尽可能释放内存,这就和"存活时间"有冲突了。

相似问题:#7

juvham commented 8 years ago

DiskCache 目前有实现 单个缓存的 存活时间 没?

juvham commented 8 years ago

一个 思路 autoTrimInterval 这个 要去掉 几秒清理一次 似乎太耗费了 可以 给设置的对象 额外 包一层 ,取出的时候 判断是否 过期 过期則弃用

ibireme commented 8 years ago

不支持存活时间。。这个我觉得会和 ageLimit、LRU 淘汰有冲突。

autoTrimInterval 并不会消耗太多,如果没有达到限制条件的话,这个方法差不多直接返回了。另外,这个参数也可以设置更长一些时间来降低清理频率。但如果去掉这个的话,那 ageLimit、freeDiskSpaceLimit 这两个限额就没法实现了。

juvham commented 8 years ago

Diskcache 不需要lru 淘汰吧

发自我的 iPhone

在 2016年4月6日,18:14,Yaoyuan notifications@github.com 写道:

不支持存活时间。。这个我觉得会和 ageLimit、LRU 淘汰有冲突。

autoTrimInterval 并不会消耗太多,如果没有达到限制条件的话,这个方法差不多直接返回了。另外,这个参数也可以设置更长一些时间来降低清理频率。但如果去掉这个的话,那 ageLimit、freeDiskSpaceLimit 这两个限额就没法实现了。

— You are receiving this because you commented. Reply to this email directly or view it on GitHub

ibireme commented 8 years ago

Diskcache 用 LRU 有什么问题吗?

juvham commented 8 years ago

Lru 的思想就是在内存限制的情况下淘汰不常用的缓存,以提高常用缓存的命中率,减少 磁盘\网络io

发自我的 iPhone

在 2016年4月6日,20:00,Yaoyuan notifications@github.com 写道:

Diskcache 用 LRU 有什么问题吗?

— You are receiving this because you commented. Reply to this email directly or view it on GitHub

ibireme commented 8 years ago

呃。。iOS 设备的磁盘空间也很有限啊,一个 App 也应该把磁盘缓存保持到一个合适的大小,不能任意增长啊。

juvham commented 8 years ago

嗯,所以磁盘缓存也是需要另外一种 淘汰方案 既要考虑 缓存污染问题 又要 尽可能的减少 iO 的次数

在 2016年4月6日,下午8:43,Yaoyuan notifications@github.com 写道:

呃。。iOS 设备的磁盘空间也很有限啊,一个 App 也应该把磁盘缓存保持到一个合适的大小,不能任意增长啊。

— You are receiving this because you commented. Reply to this email directly or view it on GitHub https://github.com/ibireme/YYCache/issues/21#issuecomment-206352767

ibireme commented 8 years ago

那,磁盘缓存有什么好的淘汰算法或方案吗?

caihua commented 8 years ago

这个功能还是很有必要的,先实现磁盘的也可以的。内存那个, 收到内存警告时可以释放内存,取的时候再从磁盘取就是了。

wdrabbit commented 8 years ago

不支持过期时间好麻烦,很多场景都需要,还得自己再封装实现。 实际可以原生支持的,系统内存警告的时候,如果过期时间不到也可以清除,但如果取出缓存的时候过期时间已经到了就直接清楚返回空值。

admintestgithub commented 7 years ago

可不可以在Diskcache层,把item的最后存储时间公布出来,这样可以根据时间来操作item的更新策略。