YYCache源码解读 (一)

article/2025/10/4 4:53:22

YYCache

  YYCache是 ibireme 大神在2015年设计的一个IOS缓存工具。
  通常来讲,一个缓存包括内存缓存和磁盘缓存。YYCache在磁盘缓存的设计上使用数据库sqlite映射和文件系统映射的方式进行存储,内存中设计了一个双向链表的结构存储数据结点。内存和磁盘的数据淘汰策略均采用了lru算法进行实现。同时在存储上,YYCache分别对对象数量,存储容量,对象生存周期、内存警告、程序退出到后台时的状态等进行了限制。同时采用锁结构和信号量保证了线程同步与安全。

在这里插入图片描述

图一:YYCache类图

  如图一所示,YYCache的结构主要包括三部分,分别是磁盘缓存部分、内存缓存部分、YYCache主体类。其中磁盘缓存部分包括YYDiskCache和YYKVStorage两个类,在YYKVStorage中实现了存取和删除操作,其中包括对数据库sqlite和文件的存取和删除,以文件大小阈值决定存储在文件还是存储在数据库,默认20k. YYDiskCache中主要实现了存取操作的方法、定时检查(根据三个变量:对象数量、对象存储容量、对象保存时间、磁盘剩余空闲空间)并淘汰缓存内最早访问的值(LRU算法)。YYMemoryCache实现了内存中的缓存逻辑,主要维护了一个链表,实现了将任意结点移动到头结点,在头结点处插入、尾结点处删除的方法,实现了LRU算法。YYCache与YYDiskCache和YYMemoryCache相关联,同时增加一个值到内存和磁盘,查询数据会优先查询内存中变量。同时YYCache会定时检查内存和磁盘,并根据判断执行淘汰操作。

YYDiskCache

YYKVStorage

YYMemoryCache

YYCache

未完待续 未央书斋 温故知新


http://chatgpt.dhexx.cn/article/dgkMWTZJ.shtml

相关文章

Guava Cache本地缓存

目录 本地缓存 回顾 Guava Cache介绍 Guava Cache使用 创建 删除 Guava Cache底层实现 本地缓存与分布式缓存对比 缓存三大问题 本地缓存 实现:CurrentHashMap、Guava Cache 缓存在应用服务器,全局变量,JVM缓存 回顾 JVM内存 方…

缓存(ehcache/guavaCache使用)

单机缓存 ehcache:单独使用:与spring集成:编程式操作:注解式使用: 与springboot集成: guava cache:单独使用:spring/springboot集成:自定义KeyGenerator: 自定…

iOS 缓存框架YYCache学习

文章目录 前言一、YYCache的来源二、YYCache的结构1. YYMemoryCache1.1 最近最少使用—LRU(Least Frequently Used)1.2 基于LRU的增删改查1.2.1 增加数据1.2.2 删除数据1.2.3 查找修改数据1.2.4 YYMemoryCache的增删改查 2.YYDiskCache 总结参考文章 前言 提示:这篇…

深入理解YYCache缓存策略

文章目录 前言几个主要成员类1 YYCache2 YYMemoryCache3 YYDiskCache 实例化1 实例方法2 构造器方法 查1 检查是否有缓存2 读缓存 增1 写内存缓存2 写磁盘缓存 删1 清空内存缓存2 清空磁盘缓存 YYMemoryCache 初始化做了什么总结本文完 前言 YYCache是著名iOS框架YYKit的一个组…

Unity OnDestroy 调用

Test Code private GameObject _temp;_temp Instantiate(Resources.Load("gameObject original"), parent) as GameObject;if (Input.GetMouseButtonDown(1)) {Destroy(_temp);_temp null; }试验结果(场景中本来存在的gameObjec或Resources出来的game…

报错原因高的地图调用mapView.onDestroy() 崩溃问题

以前在android app中使用地图的项目需要使用高德地图。 按照高德地图的开发文档创建测试项目,导入依赖,很快就成功显示了地图,然后在退出地图Activity时,app立即崩溃,通过追踪,发现是在销毁地图时出现崩溃…

Android跨进程通信Client Crash后Server端onDestroy

hi,粉丝朋友大家好! 好久没有给大家写blog了,哈哈,这里说声抱歉!实在家里比较忙,今天就来给大家分享一个跨进程专题课中学员问的一个问题,blog就来解答一下这个问题。 问题背景: 视频…

Activity onDestroy延迟回调

前端时间工作的时候遇到了两个奇怪的问题: 使用百度步行导航的时候,开启导航后立即退出,再次进入的时候就会黑屏;使用度小满支付的时候,当支付成功后页面一直显示loading,过了10s左右才恢复正常。 这看似…

基于MFC的OpenDDS发布订阅例子(PubSubDemo)

在编译完成Message.idl,产生MessageCommon.dll和相应的MessageTypeSupport的.h头文件和.cpp文件(MessageTypeSupportImpl.h、MessageTypeSupportC.h)的基础上,新建PubSubDemo.sln和工程PubSubDemo.vcxproj,并开始编码,实现基于Message的发布和订阅流程。 1)新建基于Dia…

OPenDDS程序 的 实现+运行

标题DDS程序实现和运行 本文记录了Windows10环境下OpenDDS环境搭建,idl自定义,代码生成,代码编写的全过程。 一、环境搭建 1.详细情况请参考开发笔记:1. OpenDDS环境搭建-Windows 10.note 编译好后生成了两个文件夹“OpenDDS-3.…

OpenDDS-1

转自:软件开发.OpenDDS 设计智能座舱时ECU之间通信及与TSP通信选择使用OpenDDS是可以的,因此不少人都认为OpenDDS是属于汽车以太网(Aumotive Ethernet,AE),但事实上autosar AE中定义中有SomeIP、DoIP、AVB…

Java程序调用OpenDDS

一、前言 前面我们用三篇博客介绍了 OpenDDS在WIndows上的环境配置 Windows下的OpenDDS编译(超详细)_山中野竹的博客-CSDN博客_opendds windows 三种方式运行发布订阅示例程序 OpenDDS运行示例(Messenger)程序_山中野竹的博客-C…

OpenDDS运行实例

因为OpenDDS是分布式的部署,所以一般发布端和订阅端都不在同一台电脑上。 我在同一台电脑上进行测试,所以ip地址为:127.0.0.1 1.发布端 1.1 新建ior文件 在根目录先新建repo.ior文件: IOR:010000001e00000049444c3a4f70656e44…

Java调用OpenDDS(1)-编译安装openDDS-补上了所有网络上其他文章遗漏的细节

Java调用OpenDDS过程中踩了很多坑,记录一下。 提纲 1、DDS简介 2、DDS协议的实现产品 3、OpenDDS安装过程 1、DDS简介 DDS指的是Data Distribution Service,也即数据分发服务,是OMG(Object Management Group,对象管理…

OpenDDS自学

前言 最近做毕设要做一个DDS系统和TISA系统的网关,完全没有基础,只好对着OpenDDS的Developers’ Guide和《分布式系统实时发布/订阅数据分发技术》这本书一点一点学(顺便吐槽这本书就是guide的翻译版,很多语句不通)。遇到很多问题&#xff0…

VS2015编译OpenDDS

最近需要研究下OpenDDS,因此需要搭建个环境,下面是一点经验,大家可以参考。 使用版本是OpenDDS-3.12、ACETAO-6.5.10和strawberry-perl,之所以使用ACETAO-6.5.10是因为往后的版本没有现成的2015对应的sln了。 一.资源下载 1.可以直接使用我…

Java调用OpenDDS(2)-理解OpenDDS自带的Messager示例

OpenDDS安装好之后,下一步就是利用OpenDDS来开发通信项目了。不过在项目中应用OpenDDS之前,先消化一下OpenDDS安装包中自带的示例项目messenger,通过阅读messenger的源代码来熟悉一下OpenDDS提供的用来开发Java项目的类。 提纲 1、准备工作 2…

OpenDDS

OpenDDS简介 Don Busch,首席软件工程师兼合作伙伴 Object Computing,Inc.(OCI) 介绍 分布式实时应用程序有时以数据为中心而不是以服务为中心,这意味着分布式系统中参与者的主要目标是分发应用程序数据,而…

OpenDDS系列(3) —— 第一个OpenDDS程序

文章目录 [toc]3.1 发送数据3.2 项目3.2.1 主题3.2.2 Publisher(发布者)3.2.3 Subscriber(订阅者) 3.3 在Windows上构建3.4 在Linux上构建3.4.1 运行 3.5 结论 3.1 发送数据 我们将创建一个主题,这是一个通过DDS交换数…

OpenDDS学习笔记(2):DDS概述

文章目录 一、DDS体系结构1.1 DLRL层1.2 DCPS层 二、DDS通信过程三、DDS通信特点四、DDS标准实现4.1 RTI DDS软件4.2 OpenSplice DDS软件4.3 OpenDDS软件 一、DDS体系结构 DDS采用DCPS通信机制,提供一个与平台无关的数据模型。它允许应用程序实时发布拥有的信息&am…