美文网首页
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