美文网首页
内存缓存那些事

内存缓存那些事

作者: Joolybgo | 来源:发表于2018-10-10 16:17 被阅读36次

内存缓存

缓存分为2类,内存缓存和磁盘缓存,今天说的是内存缓存。

内存缓存实现很多种方式,最简单的是就是用NSMutableDictionary来实现,性能也是最好的,但是它不是线程安全的,而且也没有存到一定程度删除的机制。

内存缓存实现的比较好的有苹果官方的NSCache,ibireme的YYMemoryCache,Pinterest的PINMemoryCache。他们都是线程安全的,也都提供了数量限制、总容量限制、内存警告清空缓存等功能。

这是ibireme提供的他们性能对比图

image

NSCache

NSCache 是苹果提供的一个简单的内存缓存,它有着和NSDictionary 类似的 API,不同点是它是线程安全的,并且不会 retain key。NSCache 底层并没有用 NSDictionary 等已有的类,而是直接调用了 libcache.dylib,其中线程安全是由 pthread_mutex 完成的。还有一点就是它的读取性能要比存取性能要好。

NSCache 有好多知名的三方库在用,比如SDWebImageAFNetworking等。网上有很多关于NSCache的用法教程,这里就不多介绍。

推荐一篇关于它用法的博客

http://www.wenghengcong.com/2016/03/iOS系统中缓存的使用/

YYMemoryCache

YYMemoryCacheibireme开源的内存缓存库,它的性能是比较好的,今天主要讲一下它的实现。

特征

  • LRU淘汰算法
  • 收到内存警告时可精准控制行为
  • 对象数量限制, 总容量限制, 存活时间限制
  • 查询和插入时, 并不是通过遍历双向链表, 而是使用字典hash表快速查找到指定结点, 保证效率

主要手段

  • CFMutableDictionaryRef来实现数据的实际存储;
  • 使用OSSpinLockLock来保证线程的安全 (之后改为pthread_mutex_lock)
  • 使用_YYLinkedMapNode_YYLinkedMap来组织数据的存储结构
  • 使用YYMemoryCache来组织对数据的各种操作

不再安全的 OSSpinLock

LRU淘汰算法也可以叫做最近最少使用,看下面这张图比较容易理解。


image
它的实现主要有3步:
1、新数据插入到链表头部;
2、每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
3、当链表满的时候,将链表尾部的数据丢弃。

YYMemoryCache里面用双向链表NSMutableDictionry的方式来实现LRU淘汰算法。

关于双向链表可以看下面这个博客
http://blog.csdn.net/wangzhen209/article/details/8180462

相关文章

  • 内存缓存那些事

    内存缓存 缓存分为2类,内存缓存和磁盘缓存,今天说的是内存缓存。 内存缓存实现很多种方式,最简单的是就是用NSMu...

  • 缓存那些事(二)什么是缓存以及缓存的作用

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(三)如何构建缓存

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(一)概述

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • 缓存那些事(四)缓存面临的挑战

    缓存那些事(一)概述 缓存那些事(二)什么是缓存以及缓存的作用 缓存那些事(三)如何构建缓存 缓存那些事(四)缓存...

  • YYCache 源码学习总结

    YYCache 内存分为内存缓存和磁盘缓存 内存缓存 1.内存缓存实现通过CFMutableDictionaryR...

  • 区分SDWebImage的三种缓存

    SDWebImage的三种缓存分为:内存图片缓存、磁盘图片缓存、内存操作缓存步骤如下1、先查看内存图片缓存,内存图...

  • Java数据结构_LinkedHashMap 的工作原理

    缓存算法的基本概念 源码基于JDK1.7 缓存机制 内存缓存 本地缓存 网络缓存 本节记录的是内存缓存 什么是内存...

  • Java数据结构_LinkedHashMap 的工作原理

    缓存算法的基本概念 源码基于JDK1.7 缓存机制 内存缓存 本地缓存 网络缓存 本节记录的是内存缓存 什么是内存...

  • glide缓存之ActiveResources

    glide 缓存分为内存缓存和硬盘缓存,内存缓存是用Lru算法缓存和弱引用缓存(ActiveResources),...

网友评论

      本文标题:内存缓存那些事

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