深入浅出理解DiskLruCache

九章 等级 745 0 0

什么是DiskLruCache?

简单来说,DiskLruCache是一种管理数据存储的技术,单从Cache的字面意思也可以理解到,"Cache","高速缓存"。在很多我们接触的APP中,大多数APP是利用了这一技术的,例如:微博,网易新闻,QQ等等。当无网络时,打开这类APP时,是不能接收网络数据的,但是你会发现无网络状态依然可以浏览到离线的数据,而这些离线的数据都是在有网络的情况下保存下来的,而这其中就涉及到DiskLruCache。

LruCache和DiskLruCache

LruCache和DiskLruCache两者都是利用到LRU算法(下文会做讲解),通过LRU算法对缓存进行管理,以最近最少使用作为管理的依据,删除最近最少使用的数据,保留最近最常用的数据。LruCache运用于内存缓存,而DiskLruCache是存储设备缓存。


为什么要使用DiskLruCache技术呢?

首先我们必须要了解到,离线数据存在的意义,当无网络或者是网络状况不好时,APP依然具备部分功能是一种很好的用户体验,假设网易新闻这类新闻客户端,数据完全存储在缓存中而不使用DiskLruCache技术存储,那么当客户端被销毁,缓存被释放,意味着再次打开APP将是一片空白,另外DiskLruCache技术也可为新闻客户端的“离线阅读”这一功能做技术支持。

DiskLruCache的存储路径是哪里?

DiskLruCache的存储路径是可以自定义的,不过也可以是默认的存储路径,而默认的存储路径一般是这样的:/sdcard/Android/data/包名/cache 。包名是指APP的包名。我们可以在手机上打开,浏览这一路径。

深入浅出理解DiskLruCache

关于DiskLruCache的实现

先来看看DiskLruCache的构造方法,主要传入四个参数:File对象(其中File对象中包含文件路径等信息),app对应版本,Key对应的文件数,最后是大小限制。

深入浅出理解DiskLruCache

DiskLruCache的存储open操作源码

创建DiskLruCache实例可以用 open方法。其中调用参数如上解释。

深入浅出理解DiskLruCache

对于上述四个参数有对应的获取方法,如下:

相关参数的获取方法

File对象的获取,如下:

深入浅出理解DiskLruCache

AppVersion的获取

深入浅出理解DiskLruCache

ValuesCount是Key所对应的文件数,我们通常选择一一对应的简单关系,这样比较方便控制,当然我们也可以一对多的关系,通常写入1,表示一一对应的关系。

maxSize用来表示最大可以缓存多少字节的数据。

关于DiskLruCache的实现算法LRU

LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。

通过数据的历史访问记录,来辨别数据的使用频率,使用频率高的,说明被使用的概率就高,同样,使用频率低,意味着被使用概率低。这样对数据进行清理,清理掉使用概率低的数据。LRU算法博客:LRU算法

深入浅出理解DiskLruCache

如何使用DiskLruCache存储数据?

这里我们以浏览网络图片为例:以一个图片Url路径,下载对应网络图片。这个时候需要对图片设定所属Key,原本可以图片的网络路径为Key,但是这样的数据缺乏安全性,所以我们将网络路径加密,所得结果作为该图片的Key。

写缓存的实现

写入缓存的操作是DiskLruCache.Editor这个类实现的。这里将操作放在线程中。

深入浅出理解DiskLruCache

读取缓存的实现

读取缓存的操作是DiskLruCache的get()方法。

深入浅出理解DiskLruCache

清除缓存的实现

实际上,DiskLruCache是本身具备管理缓存的能力的,LRU算法就是对数据的管理,移除多余数据(最少访问或调用)。不过,这里还是有手动移除缓存这个方法:

深入浅出理解DiskLruCache

收藏
评论区

相关推荐

深入浅出理解DiskLruCache
什么是DiskLruCache? 简单来说,DiskLruCache是一种管理数据存储的技术,单从Cache的字面意思也可以理解到,"Cache","高速缓存"。在很多我们接触的APP中,大多数APP是利用了这一技术的,例如:微博,网易新闻,QQ等等。当无网络时,打开这类APP时,是不能接收网络数据的,但是你会发现
HTTPS
### 最近网站更新为https,于是做个笔记 ### 将域名 [www.domain.com](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.domain.com) 的证书文件1\_www.domain.com\_bundle.crt 、 ### 私钥文件2\_www.doma
HTTPS
楔子 谣言粉碎机前些日子发布的《[用公共WiFi上网会危害银行账户安全吗?](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fwww.guokr.com%2Farticle%2F100110%2F)》,文中介绍了在使用HTTPS进行网络加密传输的一些情况,从回复来看,争议还是有的。随着网络越
HTTPS加密原理
http(超文本传输协议) ------------- > 一种属于应用层的协议 缺点: 1. 通信使用明文(不加密),内容可能会被窃听 2. 不验证通信方的身份,因此有可能遭遇伪装 3. 无法证明报文的完整性,所以有可能已遭篡改 优点: 1. 传输速度快 https ----- > HTTPS 并非是应用层的一种新协议。只是 HTTP
HTTPS学习笔记
笔记详细地址:[http://note.youdao.com/yws/public/redirect/share?id=4882fca3838541908c75c92c92d28b74&type=false](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fnote.youdao.com%2F
HTTPS请求
##HTTPS请求## > **HttpsUtils代码** package com.ices.utils.httpsHelp; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader;
java访问Https服务的客户端示例
关于证书 ==== 1、每个人都可以使用一些证书生成工具为自己的https站点生成证书(比如JDK的keytool),大家称它为“自签名证书”,但是自己生成的证书是不被浏览器承认的,所以浏览器会报安全提示,要求你手动安装证书,提示风险,是否继续等。只有通过权威的CA机构付费获得的证书才能被浏览器承认。 2、证书(无客户端服务端之分)保存着IP信息、证书过
HTTP、HTTPS常用的默认端口号
端口号标识了一个主机上进行通信的不同的应用程序。 1.HTTP协议代理服务器常用端口号:80/8080/3128/8081/9098 2.SOCKS代理协议服务器常用端口号:1080 3.FTP(文件传输)协议代理服务器常用端口号:21 4.Telnet(远程登录)协议代理服务器常用端口号:23 HTTP服务器,默认端口号为80/tcp(木马Exe
Https详细分析
#### 目录介绍 * 01.为何会有Https * 02.解决方案分析 * 03.SSL是什么 * 04.RSA验证的隐患 * 05.CA证书身份验证 * 06.Https工作原理 * 07.Https代理作用 * 08.Https真安全吗 * 09.Https性能优化 ### 01.为何会有Https * H
Nginx配置https
一、开启nginx的ssl模块 1.未安装过nginx,编译安装配置参数如下: ./configure \--prefix=/usr/local/nginx \--with-pcre \--with-http\_ssl\_module #ssl模块 \--with-http\_stub\_status\_module \--wit
Spring Boot前后端分离项目配置SSL证书——HTTPS
网站添加免费SSL证书——HTTPS协议 ==================== ### 一、SSL证书的下载 * `Spring Boot前后端分离`项目配置`SSL证书`,需要申请`两个`证书。前端申请`网站主域名`的SSL证书,后端可以在域名管理里面新建一个`子域名`。例如我的项目前端域名为:`www.mzwhzy.com`,后端域名为:`b
springboot2 配置 https
package cn.xiaojf.aibus.configure; import org.apache.catalina.Context; import org.apache.catalina.connector.Connector; import org.apache.coyote.http11.Http11Ni
tomcat从 http转成https,并且去掉端口号
强制使用HTTPS方式访问Tomcat中的相关项目,于是研究了下,现将具体的步骤写下:      主要分2步:让tomcat能使用https--->强制使用https访问  1.让tomcat能使用https    A.在运行命令 JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg R