当前位置:首页 » 文件管理 » 数据缓存策略

数据缓存策略

发布时间: 2022-09-21 12:25:35

⑴ 浏览器缓存机制

有dns的地方,就有缓存。浏览器、操作系统、Local DNS、根域名服务器,它们都会对DNS结果做一定程度的缓存。

DNS查询过程如下:

首先搜索浏览器自身的DNS缓存,如果存在,则域名解析到此完成。
如果浏览器自身的缓存里面没有找到对应的条目,那么会尝试读取操作系统的hosts文件看是否存在对应的映射关系,如果存在,则域名解析到此完成。
如果本地hosts文件不存在映射关系,则查找本地DNS服务器(ISP服务器,或者自己手动设置的DNS服务器),如果存在,域名到此解析完成。
如果本地DNS服务器还没找到的话,它就会向根服务器发出请求,进行递归查询。

浏览器本地缓存失效后,浏览器会向CDN边缘节点发起请求。类似浏览器缓存,CDN边缘节点也存在着一套缓存机制。CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的
Cache-control: max-age 的字段来设置CDN边缘节点数据缓存时间。

当浏览器向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,若缓存数据并没有过期,则直接将缓存数据返回给客户端;否则,CDN节点就会向服务器发出回源请求,从服务器拉取最新数据,更新本地缓存,并将最新数据返回给客户端。 CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。

CDN 优势
CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低。
大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源服务器的负载。

http请求报文(request)
请求行
请求方法  空格  URL 空格  协议版本 回车符 换行符
请求头(通用信息头、请求头、实体头)
头部字段名 冒号  值  回车键 换行符
...
头部字段名 冒号  值  回车键 换行符
空行
回车符   换行符
实体主体(只有post请求有)
主体

http响应报文(response)
状态行
协议版本  空格  状态码 空格  状态码描述 回车符 换行符
响应头部
头部字段名 冒号  值   回车符 换行符
...
头部字段名 冒号  值   回车符 换行符
空行
回车符   换行符
响应正文
正文

浏览器初次向服务器发起请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存返回的结果,是则将请求结果和缓存标识存入浏览器缓存中

浏览器每次发起请求,都会现在浏览器缓存中查找该请求的结果以及缓存标识
浏览器                浏览器缓存        服务器

——————第一次发起http请求——————>

<——没有该请求的缓存结果和缓存标识————

——————————————发起http请求——————————————>

<——————————返回该请求结果和缓存规则————————————

——将请求结果和缓存标识存入浏览器缓存——>

强制缓存就是向浏览器缓存查找结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程

强制缓存的情况分为三种:
1、不存在该缓存结果和缓存标识,强制缓存失效,直接向服务器发起请求
2、存在该缓存结果和缓存标识,但结果已经失效,强制缓存失效,使用协商缓存
3、存在该缓存结果和缓存标识,且该结果没有失效,强制缓存生效,直接返回该结果

控制强制缓存的字段:Expires,Cache-Control

Expires 是 HTTP/1.0 控制缓存的字段,值为服务器返回该请求的结果缓存时间
即再次发送请求是,客户端时间 小于 Expires的值,直接使用缓存结果

Cache-Control 是HTTP/1.1的规则,主要用于控制网页缓存,主要取值为:
public:所有的内容都缓存(客户端和代理服务器都可以缓存)
private:所有内容只有客户端可以缓存(默认值)
no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
no-store:即不使用强制缓存,也不使用协商缓存
max-age=xxx:缓存内容将在xxx秒后失效

Expires 是一个绝对值
Cache-Control 中 max-age 是相对值,解决了 Expires时期 服务端与客户端 可能出现时间差的问题

注:Expires和Cache-Control同时存在时,只有Cache-Control生效

协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

协商缓存的两种情况:
1、协商缓存生效,返回304,继续使用缓存
过程:
浏览器                 浏览器缓存     服务器

————————发起http请求————————>

<——该请求的缓存结果失效,只返回缓存标识——

————————携带该资源的缓存标识,发起http请求————————>

<—————————————304,该资源无更新————————————

——————获取该请求的缓存结果——————>

<——————返回该请求的缓存结果——————

2、协商缓存失败,返回200和请求结果
过程:
浏览器                 浏览器缓存     服务器

————————发起http请求————————>

<——该请求的缓存结果失效,只返回缓存标识——

————————携带该资源的缓存标识,发起http请求————————>

<————————200,资源已更新,重新返回请求和结果———————

——将该请求结果和缓存标识存入浏览器缓存中—>

协商缓存的标识也是在响应报文的HTTP头中和请求结果一起返回给浏览器的

控制协商缓存的字段:
(1) Last-Modified/If-Modified-Since:Last-Modified是服务器响应请求是,返回该资源文件在服务器最后被修改的时间;If-Modified-Since再次发起请求时,携带上次返回的Last-Modified的值,服务器将该字段值与该资源最后修改时间对比,决定是否用缓存
(2)Etag/If-None-Match:Etag服务器响应请求时,返回当前资源文件的一个唯一标识,由服务器生成之;If-None-Match是再次发起请求时,携带上次返回的唯一标识Etag的值,服务器收到后,将该字段值与该资源在服务器上的Etag对比,一致 则返回304,否则返回200

注:Etag/If-None-Match优先级高于Last-Modified/If-Modified-Since,同时存在时只有Etag/If-None-Match生效

浏览器缓存分为:内存缓存 和 硬盘缓存

内存缓存特性:
(1)快速读取:内存缓存会将编译解析后的文件,存入该进程的内存中,便于下次运行时快速读取
(2)时效性:一旦关闭进程,进程内存清空

硬盘缓存特性:
永久性:直接写入硬盘文件中
复杂、缓慢:读取缓存对该缓存存放的硬盘文件进行I/O操作,重新解析

from memory cache:使用内存中的缓存

from disk cache:使用硬盘中的缓存

浏览器读取顺序:memory ——> disk

浏览器将js和图片等文件解析执行后直接存入内存缓存中,F5刷新页面时,from memory cache(使用内存中的缓存)
css文件存入硬盘中,F5刷新页面时,from disk cache(使用硬盘中的缓存)

参考文章
https://segmentfault.com/a/1190000017962411
https://www.cnblogs.com/chengxs/p/10396066.html

⑵ 11.33数据缓存的好处是什么,如何实现数据缓存

数据库缓存的作用是只在数据第一次被访问时才从数据库中读取数据,将数据放在存储介质中,以后查询相同的数据则直接从存储介质(内存)中返回,这样速度有明显的提升。
为了更好的使用数据缓存,应注意以下几点:
1、如果一个实体标记了缓存属性,则无论该类是 通过ID查询还是其它方式的查询得到的结果,都会自动缓存。 所以,不必担心结果是否能够按照预期的需要缓存。
2、查询缓存如何使用? 在CastleActiveRecord中的查询类没有提供对查询缓存的支持,只能使用NHibernate的查询才可以,例子如上所述。
3、缓存的性能,缓存在一定程度上可以提高应用的性能,但需要正确使用,如果使用不慎,缓存反而成为负担,比如,在应用中如果使用NHibernate.Caches.Prevalence 作为缓存提供程序,如果数据量大,它要在指定目录下写入缓存文件,IO消耗相当大,虽然数据库访问少了,但是应用的IO却增长,还不如不使用缓存。因此,使用缓存时应尽量避免使用文件型缓存,应使用内存型缓存。
4、缓存的策略。查询缓存应只对只读性数据进行缓存,如果是经常读写的数据,可能造成数据不一致,至于造成数据不一致的原因没有花时间根究。
5、如果实体有继承关系,必须在被继承的类上也标记使用 缓存,否则,子类的缓存无效。
6、如果对查询进行缓存,必须实体也要标记缓存,否则查询缓存无效。

⑶ u盘怎么缓存数据

鼠标右键单击电脑u盘图标,点击“属性”选项,找到u盘属性窗口,选中“硬件”标签,点击u盘磁盘驱动器,单击“属性”按键,选中里面的“策略”标签,单击“快速删除(默认)”选项,再单击“确定”按键即可。x0dx0aUSB盘USB盘,简称U盘,另作优盘,是U盘[5]的谐音。属于移动存储设备,用于备份数据,方便携带。U盘是闪存的一种,因此也叫闪盘。特点是小巧便于携带、存储容量大、价格便宜。一般的U盘容量有1G、2G、4G、8G、16G、32G、64G等。x0dx0a更多关于u盘怎么缓存数据,进入:https://www.abcgonglue.com/ask/3419bd1615821314.html?zd查看更多内容

⑷ 地图缓存使用指南

地图缓存是快速访问地图服务的有效方式。目前流行在线地图服务,如 Google Maps,MapBar,BingMaps 等,对浏览速度和并发性要求都比较高,均采用缓存地图的方式满足快速访问地图的需求。

什么是地图缓存?

作为一种改善地图浏览用户体验的优化策略,地图缓存实际上是包含了一系列比例尺一定地图范围内的地图切片文件。在服务端创建地图缓存之后,客户端的地图操作,比如放大、缩小和平移,都会向服务端发送一个 URL 请求,此时,服务端按照请求返回预先生成的地图切片,从而达到降低服务器负担并快速显示地图,提升地图浏览速度。

为什么使用地图缓存?

使用地图缓存时,只需要付出一次生成缓存的代价,就可以提供给客户端地图显示以快速的响应速度。地图缓存是以一系列不同比例尺下地图图片形式提供的,因此不受普通地图显示上的约束,比如地图信息量的大小、地物的复杂程度、是否带有标注、所使用的地图符号等的限制。因为,一般情况下,地图渲染的细节越多,承载的信息量越丰富,同等环境下,绘制矢量地图就越慢,但使用了地图缓存,客户端在获得了同样显示效果的同时,等待时间却大大缩短。特别是对海量数据,使用缓存可以极大地提高浏览速度,加速地图响应时间,最终提升用户体验。

SuperMap产品针对海量数据,在保证客户端高效访问的前提下,提供了一套完备的二三维缓存体系。SuperMap iDesktop 8C 桌面产品支持生成影像缓存、地形缓存、矢量缓存、模型缓存、地图缓存,还可以对场景直接生成场景缓存。生成的缓存数据可以有多种方式在地图窗口或者场景窗口中加载,也可以部署到服务端进行发布,方便客户端进行浏览。

为了帮助用户深入了解SuperMap 的地图缓存技术、有效使用 SuperMap 产品生成和发布地图缓存等,本专题文档就地图缓存的相关内容进行阐述。

1. 地图缓存的目录结构

地图缓存根据缓存版本的不同,生成的缓存目录的层次结构有所不同。SuperMap iDesktop 7C 桌面应用程序目前支持六种不同版本的地图缓存。

地图缓存的目录结构主要采用 iServer6R,iServer 2.0和 IS .NET 三种缓存策略,按照不同比例尺级别进行分层,都是从指定范围的左上角为起点进行分块。其中2.0,2.1版本的地图缓存均采用 IS .NET 缓存策略,3.0,3.1版本的地图缓存均采用 iServer 2.0 缓存策略,4.0和5.0版本的缓存采用 iServer 6R 缓存策略。

下面就这三种缓存版本的目录结构做详细的介绍。

1.1. iServer 6R 缓存目录结构说明

iServer 6R 是针对 UGC(UniversalGIS Class)系列产品的缓存策略。UGC 系列产品包括桌面产品 SuperMap iDesktop 7C,组件式二次开发平台 SuperMap Objects java/.NET 6R 以及服务器产品 SuperMapiServer 6R 系列产品。

iServer 6R 缓存策略生成的地图缓存目录共分为六个层次,如下图所示:

图:iServer 6R 缓存目录结构说明

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称来指定。

第二层:地图缓存目录。默认名称格式为:MapName_Width×Height。其中MapName

是地图名称,Width 和 Height 是16进制的图片宽高,例如,目录为世界地图_Day_100×100,表示地图缓存的图片大小为256像素×256像素。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的所有地图切片文件。

第四层:不同空间区域行号缓存目录。目录名称以空间区域(缓存范围)行号命名。所谓空间区域指的是将地图按照网格分块算法将一幅地图分为多个块,每一个分块表示一个空间区域。每个空间区域的宽高都是缓存块的整数倍。区域内至少有一张图片,行号就是空间区域在指定范围内的行数,行号从上到下逐渐增大,用十进制表示。范围扩大时行号可以是负值。

第五层:不同空间区域列号缓存目录。目录名称以空间区域(缓存范围)列号命名。列号就是空间区域在指定范围内的列数,列号从左到右逐渐增大,用十进制表示。范围扩大时列号可以是负值。

第六层:缓存图片文件名称。其格式为:RowxCol_MapHashCode.postfix。其中 Row 表示缓存图片按缓存块划分的行号索引,Col 表示缓存图片按缓存分块划分的列号索引,Row 和 Col 都可以是负数。MapHashCode 表示当前比例尺下地图的16位 HashCode 值,postfix 是缓存图片文件的扩展名。如上图中的名称为 0000×0001_108F8B08FIX.png 的图片,0000为行号,0001为列号,108F8B08FIX 为16位的 HashCode,png 为图片的扩展名。

1.2. IS .NET 缓存目录结构说明

IS .NET 缓存策略是SuperMap 最早使用的缓存策略,也是通过分层分块生成切片文件(影像)的思路进行缓存构建,并且从坐标系、地图、图层风格以及数据范围等方面考虑了缓存更新问题。它主要是 SFC(SuperMap Foundation Class)系列产品采用的缓存策略。

IS .NET 缓存策略生成的二维地图缓存目录共分为五个层次,如下图所示:

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称指定。

第二层:地图缓存目录。默认名称格式为:MapName_Width×Height。其中 MapName 是地图名称,Width 和 Height 是16进制的图片宽高,例如,目录为世界地图_Day_100×100,表示地图缓存的图片大小为256像素×256像素。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的地图切片文件。

第四层:图片索引目录。按照网格分块算法将某一比例尺下的地图切割成多个图幅,每一个图幅在整个地图中都有一个索引值对应,形为:X×Y。X,Y 分别表示图幅在地图分块队列中的列号和行号。

第五层:缓存图片文件名称。其格式为:centerIndex_MapHashCode.postfix,其中centerIndex 表示缓存图片的中心点索引,MapHashCode 表示当前比例尺下地图的 HashCode 值,postfix 是缓存图片文件的扩展名。如上图所示,名称为332×7361_108F8BFIX.png 的图片,(332,7361)表示图片中心点的索引值,108F8BFIX 为当前比例尺下地图的 HashCode 值,png 为图片的后缀名。

1.3. iServer 2.0 缓存目录结构说明

iServer 2.0 缓存策略与 IS .NET缓存策略相似,是 SuperMap iServer 2.0 产品的缓存策略。iServer 2.0 缓存策略生成的二维地图缓存目录共分为五个层次,如下图所示:

图:iServer 2.0缓存目录结构说明

第一层:缓存根目录,用来保存不同缓存文件。缓存根目录名称可以为任意名称。在生成缓存时,通过输入缓存名称指定。

第二层:地图缓存目录,文件夹名称格式为:MapName_Width×Height,其中 Width×Height 按照10进制计算,即目录名称为:地图名称_图片的实际宽×高。

第三层:不同比例尺级别缓存目录。分层目录名称为设置的比例尺大小。如15625000文件夹下保存的是比例尺为15625000时的地图切片文件。

第四层:缓存图片索引目录({Index_x})。将地图分块之后,对每一个图片分别建立索引号。对每一副地图,按照要生成的缓存图片大小生成 M×N 个图片,每一列为 Index_x,x 的值从 0 到 N-1,每一行为 Index_y,y 的值从 0 到 M-1。在这一层,目录名为每一列的索引名,即 Index_x,表示每一列图片缓存的目录。

第五层:缓存图片文件名称。其格式为:Index_y.postfix的值。如上图中选中的文件夹,文件夹5表示 X 索引号(Index_x)为5 ,图片名称15表示 Y 索引号(Index_y)为15,则此图片位于地图目录的第5行第15列。

2. 地图缓存存储类型

SuperMap 缓存有两种存储类型,即原始型与紧凑型。

2.1. 原始型

当缓存储存类型为原始型,切片文件以单独的图片文件格式存放在磁盘上,不对数据进行压缩,能够直接读取。地图缓存数据直观地表现为多个文件夹下的原始图片。

原始型存储方式具有以下特点:

l 可以直接读取,比较直观。

l 占用磁盘空间大,不太易于管理,拷贝和迁移不太方便。

l 对密级较高的数据,不能设置密码

2.2. 紧凑型

当缓存储存类型为紧凑型时,对原始的切片文件采用一定的压缩和加密机制,在结构上采用一组文件替代原始的图片格式的缓存机制。此时,不同比例尺文件夹下的缓存数据将表现为一组文件,该组文件包括两个部分:索引文件(.sc)、一组数据文件(.sc00和*.lock)。如下图所示,为世界地图_Day 生成的紧凑型缓存文件。

其中,索引文件为 *.sc(SuperMapCache File)格式;数据文件为 *.scXX(SuperMap Caceh File Data)格式,这里的 XX 不是两个字母,是两个16进制数字(00~FF)。目前只支持两位16进制数,所以最多支持256个数据文件。数据文件的个数由缓存数据的大小决定,一个数据文件最大为2G。

与原始型相比,紧凑型存储方式具有以下优势:

3. 使用地图缓存的建议

为了更高效的生成地图缓存,可以从以下几个方面考虑:

3.1. 选择合适的比例尺系列

为了充分利用缓存数据,同时实现多级缩放,可以对地图设置多个比例尺。多设置一些比例尺级别,可以在浏览过程中比较顺畅,不会出现比较大的跳跃。在地图制作的过程中要考虑要素在不同的比例尺下是否需要显示。比如在1:100000的比例尺下,河流是线状的,在1:10000的比例尺下,可能需要讲河流显示为面状的。在小比例尺下,一些注记不需要显示,但随着比例尺的扩大,注记可能需要显示。这种情况下,需要考虑合适的比例尺级别了。

3.2. 缓存路径设置

如果生成的缓存要在 SuperMapiServer Java 6R 服务端发布,可以直接将 SuperMap iDesktop 7C 桌面缓存路径设置为 SueprMap iServer Java 6R 的出图路径下,即 %SuperMapiServer Java_HOME%webappsiserveroutputcache,否则缓存切片拷贝可能会花费比较长的时间。

3.3. 适当的制作地图

制作地图的过程中,可以考虑对线型或者文本对象使用反走样,对过小的对象进行过滤。

对地图中的过小对象使用过滤条件进行过滤,可以在不影响地图所承载的信息量的情况下,将提升地图浏览速度。

进行反走样后矢量地图中的线型和文本看起来更光滑,提高视觉感受,但会造成性能下降。因此在使用反走样时,需要浏览速度和性能之间寻找一种平衡,既要达到浏览效果最佳,也要保证浏览速度。

对比较复杂的地图,要避免对象节点过多,可以考虑进行光滑处理或者重采样。

3.4. 保持工作空间一致

工作空间中的地图参数决定了SuperMap iServer Java 使用的缓存文件中缓存图片的命名,因此需要保证用于制作缓存的工作空间中的地图和用于 SuperMap iServer Java 发布的工作空间中的地图一致。影响参数包括地图的风格、数据的连接情况、图层顺序、默认比例尺、地图范围等。因此制作完成缓存后,尽量不要对工作空间的地图进行修改,以保证发布的地图与用于制作缓存的地图一致。

同时需要保持地图中所有地图可用,所有图层对应的数据集合数据源在工作空间中都存在,不能有无对应数据源和数据集的空连接图层。对数据集中对象的编辑,如添加、删除、更新等,不会影响编辑区域以外的缓存图片(如果需要的话,只需更通过 SuperMap iServer 更新这部分区域的缓存即可)。

3.5. 合理设置地图缓存范围和索引范围

可以为频繁访问的地图区域生成缓存,以降低生成和存储缓存的成本。例如,在访问世界地图时,对于广大的无人区,可以不生成缓存。

用 SuperMap iDesktop7C 生成地图缓存时建议将索引范围设置为发布地图的整幅地图范围,以便与SuperMap iServer Java 缓存索引范围保持一致。在根据需求修改地图缓存的范围信息时,也需要保持索引范围是整幅地图范围。

缓存图片与出图设备无关的特性

利用 SuperMap iDesktop7C 制作地图缓存时,如果 SuperMap iDesktop 7C 所在的计算机与 SuperMap iServer Java 所在的计算机不是同一台机器,有可能由于设备显示地图分辨率不同,从而不同设备上的缓存不能很好地一起使用,例如拼接出现问题等。SuperMap iDesktop 7C 桌面支持配置地图缓存与设备显示分辨率无关。具体的操作方法如下:

3.6. 在 SuperMap iDesktop7C 桌面端生成的地图缓存,如需在 SueprMap iServer Java 服务端发布,需要注意,生成紧凑型地图缓存时,不要对缓存进行加密,即不要设置密码,否则在服务端发布会有问题。

⑸ JAVA几种缓存技术介绍说明

1、TreeCache / JBossCache

JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行JBoss服务器之间 的集群工作。JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务,当然,它也能独立运行。

2、WhirlyCache

Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。

3、SwarmCache

SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。

4、JCache

JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。

5、ShiftOne

ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。

⑹ 哪位了解java数据缓存技术有哪些

一、什么是缓存
1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问
2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为 Cache

常见的缓存技术有哪些?

一、操作系统缓存

1、文件系统提供的Disk Cache:操作系统会把经常访问到的文件内容放入到内存当中,由文件系统来管理

2、当应用程序通过文件系统访问磁盘文件的时候,操作系统从Disk Cache当中读取文件内容,加速了文件读取速度

3、Disk Cache由操作系统来自动管理,一般不用人工干预,但应当保证物理内存充足,以便于操作系统可以使用尽量多的内存充当Disk Cache,加速文件读取速度

4、特殊的应用程序对文件系统Disk Cache有很高的要求,会绕开文件系统Disk Cache,直接访问磁盘分区,自己实现Disk

5、Cache策略

  • Oracle的raw device(裸设备) – 直接抛弃文件系统

  • MySQL的InnoDB: innodb_flush_method = O_DIRECT

二、数据库缓存

    缓存策略:a、Query Cache;b、Data Buffer

三、应用程序缓存

包括对象缓存、查询缓存、页面缓存

四、web服务器端缓存

  • 基于代理服务器模式的Web服务器端缓存,如squid/nginx

  • Web服务器缓存技术被用来实现CDN(内容分发网络 content delivery network)

  • 被国内主流门户网站大量采用

  • 不需要编程,但仅限于新闻发布类网站,页面实时性要求不高

五、基于ajax的浏览器缓存

  • 使用AJAX调用的时候,将数据库在浏览器端缓存

  • 只要不离开当前页面,不刷新当前页面,就可以直接读取缓存数据

  • 只适用于使用AJAX技术的页面

⑺ u盘如何缓存数据

鼠标右键单击电脑u盘图标,点击“属性”选项,找到u盘属性窗口,选中“硬件”标签,点击u盘磁盘驱动器,单击“属性”按键,选中里面的“策略”标签,单击“快速删除(默认)”选项,再单击“确定”按键即可。
USB盘USB盘,简称U盘,另作优盘,是U盘[5]的谐音。属于移动存储设备,用于备份数据,方便携带。U盘是闪存的一种,因此也叫闪盘。特点是小巧便于携带、存储容量大、价格便宜。一般的U盘容量有1G、2G、4G、8G、16G、32G、64G等。
更多关于u盘怎么缓存数据,进入:https://www.abcgonglue.com/ask/3419bd1615821314.html?zd查看更多内容

⑻ Okhttp解析(五)缓存的处理

大家好,之前我们讲解了Okhttp网络数据请求相关的内容,这一节我们讲讲数据缓存的处理。本节按以下内容讲解Okhttp缓存相关的内容。

缓存的使用场景很多,通过它可以将数据通过一定的规则存储起来,再次请求数据的时候就可以快速从缓存中读取了,缓存有以下优势。

HTTP本身提供了一套缓存相关的机制。这套机制定义了相关的字段和规则,用来客户端和服务端进行缓存相关的协商,如响应的数据是否需要缓存,缓存有效期,缓存是否有效,服务器端给出指示,而客户端则根据服务端的指示做具体的缓存更新和读取缓存工作。http缓存可以分为两类:

强制缓存,在缓存数据未失效的情况下,可以直接使用缓存数据,有两个字段Expires和Cache-Control用于标明失效规则。

表示过期时间,由服务端返回。那么下次请求数据时,判断这个Expires过期时间是否已经过了,如果还没有到过期时间,则使用缓存,如果过了过期时间,则重新请求服务器的数据。Expires格式如下:

不过因为服务器和客户端的时间并不是同步的,用一个绝对时间作为过期的标记并不是很明智,所以HTTP1.1之后更多的是Cache-Control,它的控制更加灵活。

表示缓存的控制,有服务端返回。它有以下几个取值:

默认情况下是private,也就是不能共享的。Cache-Control格式如下:

对比缓存,表示需要和服务端进行相关信息的对比,由服务器决定是使用缓存还是最新内容,如果服务器判定使用缓存,返回响应吗304,判定使用最新内容,则返回响应码200和最新数据。对比缓存的判定字段有两组:

ETag表示资源的一种标识信息,用于标识某个资源,由服务端返回,优先级更高。格式如下:

然后客户端再次请求时,加入字段If-None-Match,格式如下:

服务端收到请求的该字段时(之前的Etag值),和资源的唯一标识进行对比,如果相同,说明没有改动,则返回状态码304,如果不同,说明资源被改过了,则返回状态码200和整个内容数据。

Last-Modified表示资源的最近修改时间,由服务端返回,优先级更低。格式如下:

Last-Modified
由服务器返回,表示响应的数据最近修改的时间。


If-Modified-Since
由客户端请求,表示询问服务器这个时间是不是上次修改的时间。如果服务端该资源的修改时间小于等于If-Modified-Since指定的时间,说明资源没有改动,返回响应状态码304,可以使用缓存。如果服务端该资源的修改时间大于If-Modified-Since指定的时间,说明资源又有改动了,则返回响应状态码200和最新数据给客户端,客户端使用响应返回的最新数据。

Last-Modified字段的值(服务端返回的资源上次修改时间),常常被用于客户端下次请求时的If-Modified-Since字段中。

HTTP的缓存规则是优先考虑强制缓存,然后考虑对比缓存。

Okhttp缓存相关的类有如下:

要开启使用Okhttp的缓存其实很简单,只需要给OkHttpClient对象设置一个Cache对象即可,创建一个Cache时指定缓存保存的目录和缓存最大的大小即可。

那么下面我们来看看Okhttp缓存执行的大概流程

Okhttp的缓存流程分为读取缓存和存储缓存两个过程,我们分别分析。

读取使用缓存的流程从HttpEngine的sendRequest发送请求开始。

接下来我们分析

从Cache的get方法开始。它按以下步骤进行。

如果存在缓存的话,在指定的缓存目录中,会有两个文件“****.0”和“****.1”,分别存储某个请求缓存的响应头和响应体信息。(“****”是url的md5加密值)对应的ENTRY_METADATA响应头和ENTRY_BODY响应体。缓存的读取其实是由DiskLruCache来读取的,DiskLruCache是支持Lru(最近最少访问)规则的用于磁盘存储的类,对应LruCache内存存储。它在存储的内容超过指定值之后,就会根据最近最少访问的规则,把最近最少访问的数据移除,以达到总大小不超过限制的目的。

接下来我们分析CacheStrategy缓存策略是怎么判定的。

直接看CacheStrategy的get方法。缓存策略是由请求和缓存响应共同决定的。

接来下我们看看CacheControl类里有些什么。

可以发现,它就是用于描述响应的缓存控制信息。

然后我们再看看Okhttp存储缓存是怎么进行的。

存储缓存的流程从HttpEngine的readResponse发送请求开始的。

可以看到这里先通过maybeCache写入了响应头信息,再通过cacheWritingResponse写入了响应体信息。我们再进去看Cache的put方法实现。

我们继续看Cache的writeTo方法,可以看到是写入一些响应头信息。

到这里Okhttp缓存的读取和存储流程我们就清楚了。可以说,缓存的使用策略基本都是按照HTTP的缓存定义来实现的,所以对HTTP缓存相关字段的理解是很重要的。然后关于DiskLruCache是如何管理缓存文件的,这个其实也很好理解,首先的原则就是按照LRU这种最近最少使用删除的原则,当总的大小超过限定大小后,删除最近最少使用的缓存文件,它的LRU算法是使用LinkedHashMap进行维护的,这样来保证,保留的缓存文件都是更常使用的。具体实现大家可以分析DiskLruCache和LinkedHashMap的实现原理。

⑼ 常见的缓存策略有哪些,如何做到缓存与 db 里的数据一致性

您: 种writer-reader架构般思路缓存更新阶段由writer解决致性问题数据库数据变化同步更新redis并确保缓存更新功 作完整性判断检查全部属性数据使用自增版本号(或间戳)判断否新 作置检测优化降低扫描代价针近间周期内(依0min)数据库更新数据集合应该比较redis进行检查代价比较

⑽ hibernate 缓存策略usage read-only和read-write有什么区别

二级缓存是session间共享的,适用于对象数据频繁共享,数据变化频率低。
read-only是只读型,缓存不更新,适用于不发生改变的数据,效率最高,事务隔离级别最低,
read-write读写型,缓存在数据变化时触发更新,适用于变化的数据,
nonstrict-read-write不严格读写型,缓存不定期更新,适用于变化频率低的数据,

transactional事务型,缓存在数据变化时更新,并且支持事务,效率最低,事务隔离级别最高。
只知道这么多,希望对你有帮助。

热点内容
我的世界迪士尼神奇宝贝服务器地址 发布:2024-10-10 09:03:02 浏览:556
win7存储并显示 发布:2024-10-10 09:02:30 浏览:551
oracle数据库导出 发布:2024-10-10 08:34:56 浏览:363
androidn特性 发布:2024-10-10 08:30:41 浏览:729
存储过程修改记录 发布:2024-10-10 08:23:28 浏览:58
呱呱编程 发布:2024-10-10 08:12:54 浏览:895
androidoa 发布:2024-10-10 08:07:14 浏览:894
安卓手机怎么关掉开了的游戏 发布:2024-10-10 07:50:14 浏览:681
idea新建java类 发布:2024-10-10 07:50:12 浏览:71
教务处的账号和密码是什么 发布:2024-10-10 07:47:51 浏览:790