YYCache 源码分析(二)

本文分析YYMemoryCache实现原理:

295346-f3c5dedbdd158ec3

YYMemoryCache是内存缓存,所以存取速度非常快,主要用到两种数据结构的LRU淘汰算法

1.LRU

Cache的容量是有限的,当Cache的空间都被占满后,如果再次发生缓存失效,就必须选择一个缓存块来替换掉.LRU法是依据各块使用的情况, 总是选择那个最长时间未被使用的块替换。这种方法比较好地反映了程序局部性规律

2.LRU主要采用两种数据结构实现

  • 双向链表(Doubly Linked List)
  • 哈希表(Dictionary)

3.对一个Cache的操作无非三种:插入、替换、查找

  • 插入:当Cache未满时,新的数据项只需插到双链表头部即可
  • 替换:当Cache已满时,将新的数据项插到双链表头部,并删除双链表的尾结点即可
  • 查找:每次数据项被查询到时,都将此数据项移动到链表头部

4.分析图(分析源码时可以对照该图)

295346-92b5dc1f0b356781

5.YYMemoryCache.m里的两个分类

链表节点_YYLinkedMapNode

链表_YYLinkedMap
方法插入、替换、查找方法实现:
存在表头情况图形分析(其他情况不用图分析,自己想象吧,呵呵)
295346-1cb03d629ecbf2fa
295346-682e8396c2d9e092

YYMemoryCache.m实现分析(如果上面弄清楚,接下来就简单多了),增删改都是调用上面的方法,下面分析查找与添加缓存方法实现

接下来会分析YYDiskCache实现原理

文章同步到微信公众号:hans_iOS 有疑问可以在公众号里直接发

1 4 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部