YYCache 源码学习总结
2020-08-04 本文已影响0人
科仔
YYCache 内存分为内存缓存和磁盘缓存
内存缓存
1.内存缓存实现通过CFMutableDictionaryRef字典实现数据的存储查找
2._YYLinkedMap是一个双向链表,用于实现LRU算法,当内存不足的时候最近最少用到的数据将被清除。
3.YYMemoryCache是线程安全的,通过pthread_mutex_lock实现的。pthread_mutex_lock互斥锁经过苹果的优化目前是效率最高的锁了。pthread_mutex_trylock 和pthread_mutex_lock不同点在于pthread_mutex_trylock没成功会继续做别的事,而pthread_mutex_lock没成功线程会被挂起。
4.内存清除,会单独放到一个线程里面
磁盘缓存
1.磁盘缓存是通过sqlite实现的,根据数据的大小。大于20k的数据将会保存到文件,数据库中只保存文件名,小于20k的数据直接存储到数据库。
2.磁盘缓存是通过dispatch_semaphore_t实现读写分离的,读数据并发不会有数据安全问题的,可以用dispatch_barrier_async实现写入的时候前面的读操作已经完成。