缓存

iOS开发内存缓存机制

牧云@^-^@ 提交于 2020-03-08 11:12:01
转自 http://mobile.51cto.com/iphone-314374.htm 本文先介绍一下将内容缓存到内存中,在iOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制。 使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5

iOS开发之内存缓存机制

前提是你 提交于 2020-03-08 11:10:28
使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行。有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求。 内存缓存我们可以使用sdk中的NSURLCache类。NSURLRequest需要一个缓存参数来说明它请求的url何如缓存数据的,我们先看下它的CachePolicy类型。 1、NSURLRequestUseProtocolCachePolicy NSURLRequest默认的cache policy,使用Protocol协议定义。 2、NSURLRequestReloadIgnoringCacheData 忽略缓存直接从原始地址下载。 3、NSURLRequestReturnCacheDataElseLoad 只有在cache中不存在data时才从原始地址下载。 4、NSURLRequestReturnCacheDataDontLoad 只使用cache数据,如果不存在cache,请求失败;用于没有建立网络连接离线模式; 5、NSURLRequestReloadIgnoringLocalAndRemoteCacheData:忽略本地和远程的缓存数据,直接从原始地址下载,与NSURLRequestReloadIgnoringCacheData类似。 6

IOS开发缓存机制之—本地缓存机制

戏子无情 提交于 2020-03-08 11:09:19
功能需求 这个缓存机制满足下面这些功能。 1、可以将数据缓存到本地磁盘。 2、可以判断一个资源是否已经被缓存。如果已经被缓存,在请求相同的资源,先到本地磁盘搜索。 3、可以判断文件缓存什么时候过期。这里为了简单起见这里,我们在请求url资源的时候,给每次请求的文件设定一个过期的时间。 4、可以实现:如果文件已经被缓存,而且没有过期,这将本地的数据返回,否则重新请求url。 5、可以实现:如果文件下载不成功或者下载没有完成,下次打开程序的时候,移除这些没有成功或者没有下载完成的文件。 6、可以实现:同时请求或者下载多个资源。 设计实现: 1、设计一个CacheItem类,用来请求一个web连接,它的一个实例表示一个缓存项。这个CacheItem类,需要一个url创建一个NSURLConnection,去请求web资源。使用CacheItem类主要用来请求web资源。 /* ---------缓存项-------------- */ @interface CacheItem : NSObject { @public id<CacheItemDelegate> delegate; //web地址 NSString *remoteURL; @private //是否正在下载 BOOL isDownloading; //NSMutableData对象 NSMutableData

Integer类的缓存机制

坚强是说给别人听的谎言 提交于 2020-03-08 07:44:07
一、Integer类的缓存机制 我们查看Integer的源码,就会发现里面有个静态内部类。 public static Integer valueOf(int i) { assert IntegerCache.high >= 127; //当前值在缓存数组区间段,则直接返回该缓存值 if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; //否则创建新的Integer实例 return new Integer(i); } private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; //IntegerCache初始化时,缓存数值为-128-127的Integer实例(默认是从-128到127)。 static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty(

在低带宽或不可靠的网络环境中安装 Visual Studio 2017

[亡魂溺海] 提交于 2020-03-08 04:27:17
在低带宽或不可靠的网络环境中安装 Visual Studio 2017 2017-4-14 1 分钟阅读时长 作者 https://docs.microsoft.com/zh-cn/visualstudio/install/install-vs-inconsistent-quality-network 本文内容 下载 Visual Studio 引导程序 创建本地安装缓存 从本地缓存安装 语言区域设置列表 另请参阅 我们精心设计了新的 Visual Studio 2017 安装程序,它非常适合在各种网络和计算机条件下安装 Visual Studio。 由于安装 Visual Studio 所需的文件发布在全球传送网络上,因此我们可以从本地服务器为你获取这些文件; 在安装过程中,我们会尝试三种不同的下载技术(WebClient、BITS 和 WinInet),以最大限度地减少对防病毒和代理软件的干扰; 基于工作负载的新模型的推出意味着,需要安装的内容比旧版 Visual Studio 少。 因此,建议尝试使用新的 Web 安装程序,使用体验一定会让你感到满意。 不过,如果要确保在开始安装 Visual Studio 前已成功下载安装文件,我们已为你提供了相应对策。 开始安装前,可以使用命令行创建所需文件的本地缓存。 操作方法如下。 下载 Visual Studio 引导程序 首先

CPU缓存和内存屏障

好久不见. 提交于 2020-03-08 02:41:17
目录 CPU性能优化手段 - 缓存 多级缓存 缓存同步协议 CPU性能优化手段 - 运行时指令重排 两个问题 解决方法 - 内存屏障 CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化 例如: CPU高速缓存, 尽可能的避免处理器访问主内存的时间开销, 处理器大多会利用缓存以提高性能 多级缓存 L1 Cache (一级缓存)是CPU第一层高速缓存, 分为数据缓存和指令缓存, 一般服务器CPU的L1缓存的容量通常在32-4096kb L2 Cache (二级缓存) 由于L1高速缓存的容量限制, 为了再次提高CPU的运算速度, 在CPU外部放置一高速缓存存储器, 即二级缓存 L3 Cache (三级缓存)现在都是内置的, 而它的实际作用既是, L3缓存的应用可以进一步降低内存延迟, 同时提升大数据量计算时处理器的性能. 具有较大L3缓存的处理器更有效的文件系统缓存行为及较短消息和处理器队列长度. 一般是多核共享一个L3缓存 CPU在读取数据时, 先在L1中寻找, 再从L2中寻找, 再从L3中寻找, 然后是内存, 最后是外存储器 缓存同步协议 多CPU读取同样的数据进行缓存, 进行不同运算之后, 最终写入主内存以那个CPU为准? 在这种高速缓存回写的场景下, 有一个缓存一致性协议, 多数CPU厂商对它进行了实现. 即MESI协议,

redis做为spring与mysql缓存整合

冷暖自知 提交于 2020-03-07 21:15:54
springBoot默认缓存机制为cache可以通过导入对应依赖并在启动类中添加@EnableCaching开启缓存 < dependency > < groupId > org . springframework . boot < / groupId > < artifactId > spring - boot - starter - cache < / artifactId > < / dependency > @EnableCaching public class BlogProjectApplication { public static void main ( String [ ] args ) { SpringApplication . run ( BlogProjectApplication . class , args ) ; } } redis做为缓存 < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - pool2 < / artifactId > < / dependency > < dependency > < groupId > org . springframework . boot < / groupId > <

Git使用介绍

梦想的初衷 提交于 2020-03-07 20:01:30
git使用介绍 git 安装 配置信息 git config --global user.email "<邮箱>" git config --global user.name "<NAME>" 代码上传流程 github操作: 创建好repository 本地操作: cd 文件地址 git init git add . git status -s # 查看是否添加到本地仓库 git commit -m "frist commit" git remote add origin 'https://github.com/****/******.git' # 关联远程代码库 git push -u origin master # 提交 git init 初始化一个Git仓库 如 git init test git add git add 命令可将该文件添加到缓存 用git status -s 可以查看与上次提交的修改 A filename # 添加到缓存区 AM filename # 添加到缓存区后又有改动,可以再次添加 ?? filename # 新添加但未跟踪的文件 git clone git clone <协议> <地址> <自定义名称> 协议有ssh,http,git 如: git clone git@github.com:lwc/test.git git clone https:

关于SDWebimage的内部实现原理

混江龙づ霸主 提交于 2020-03-07 19:35:59
SDWebimage的内部实现原理各路大神都已经剖析的很透彻了 我也来发一下希望大家共同讨论学习 1. 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。 2. 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo: 交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo: 3. 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存, SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager 。 4.SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。 5. 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。 6. 根据 URLKey

您善于使用匿名函数吗?

為{幸葍}努か 提交于 2020-03-07 19:34:43
尝试从缓存中获取数据,如果数据存在则返回,否则从数据源中获取数据,放入缓存,然后返回。   您是否熟悉上面这段逻辑说明?如果您的应用中大量使用了缓存,则上面这段逻辑很可能会出现许多次。例如: CacheManager cacheManager = new CacheManager (); public List < User > GetFriends( int userId) { string cacheKey = "friends_of_user_" + userId; object objResult = cacheManager.Get(cacheKey); if (objResult != null ) return ( List < User >)objResult; List < User > result = new UserService ().GetFriends(userId); cacheManager.Set(cacheKey, result); return result; }   这段逻辑似乎比较简单,不过在实际应用中,从数据源中获取数据可能不是简单地调用一个方法,而是需要多个类之间的协作,事务控制等等,而缓存的读写可能也会比上面的示例来的复杂。因此,一个可读性高的做法是提供三个独立的方法(读取缓存,读取数据源,写入缓存)