YYCache icon indicating copy to clipboard operation
YYCache copied to clipboard

关于MemoryCache的疑惑,望解惑

Open sanyang01 opened this issue 8 years ago • 1 comments

你好,我看你源码里MemoryCahce里有关于Cost、Count和Age的清理策略,这里TrimCost应该怎么理解呢?我认为可以是自己定义的指标,但是我看它的清理策略是清理双向链表的尾部节点,所以即使我们自己定义了指标但是也没啥意义啊,它影响不了清理策略呢。

sanyang01 avatar Oct 14 '16 09:10 sanyang01

@louiesanyu

根据我的理解,“cost” 是一个类似存储大小的概念,但不唯一。Apple 的 NSCache 中对 NSCache- (void)setObject:(ObjectType)obj forKey:(KeyType)key cost:(NSUInteger)g;cost 的描述是 “Typically, the obvious cost is the size of the value in bytes”。所以 cost 表示一个缓存所消耗大小的概念,比如图片我们可以用分辨率来表示(因为可以粗略的任务分辨率越高,图片数据越大),也可以用转化成二进制流后的大小来表示。

所以此处 TrimCost 还是继续遵循 LRU 的缓存清理策略(包括 countage 也是)。 cost 是限制所有缓存最大可以有多count 是限制所有缓存最多可以有多少个,age 是限制缓存最早可以从哪个时间开始存在。

所以,既然始终都是遵循 LRU 策略的,所以无论是 costcount 还是 age 都是从双向链表的尾部节点考试清除的。

ihomway avatar Feb 08 '17 10:02 ihomway