美文网首页
8 缓存模块-内存缓存NSCache、外存缓存 和 缓存策略

8 缓存模块-内存缓存NSCache、外存缓存 和 缓存策略

作者: 哈库呐玛塔塔__ | 来源:发表于2020-05-13 02:36 被阅读0次

NSCache

NSCache是一个类似NSDictionary的可变集合。

NSCache中有一个方法在缓存中设置指定键名对应的值- (void)setObject:(ObjectType)obj forKey:(KeyType)key; ,这里key只是对obj的一个强引用。

NSCache是线程安全的。

NSCache在系统内存很低时,会自动释放对象,建议收到内存警告时调用removeAllObject主动释放缓存中的对象

@property NSUInteger countLimit;

// 能够缓存对象的最大数量。默认值为0,表示没有限制。

网络请求时有个需求做个接口请求的缓存,当baseurl,path,paramValues 组成的字符串为key,请求的结果作为obj去缓存。

外存缓存

文件  : 归档

数据库  : sqlit , FMDB

keyChain :

NSUserDefault :常用不说了

缓存策略

什么是LRU?

一种数据缓存策略,最近最少使用。

LRU-1 (简单版) 最近使用过一次

1)新数据插入到链表头部;

2)每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

3)当链表满的时候,将链表尾部的数据丢弃

LRU-K 最近使用过K次

1)数据第一次被访问,加入到访问历史列表;

2)如果数据在访问历史列表里后没有达到K次访问,则按照一定规则(FIFO,LRU)淘汰;

3)当访问历史队列中的数据访问次数达到K次后,将数据索引从历史队列删除,将数据移到缓存队列中,并缓存此数据,缓存队列重新按照时间排序;

4)缓存数据队列中被再次访问后,重新排序;

5)需要淘汰数据时,淘汰缓存队列中排在末尾的数据,即:淘汰“倒数第K次访问离现在最久”的数据

相关文章

网友评论

      本文标题:8 缓存模块-内存缓存NSCache、外存缓存 和 缓存策略

      本文链接:https://www.haomeiwen.com/subject/juawnhtx.html