大家好,今天为大家分享一个超强的 Python 库 - diskcache。 Github地址:https://github.com/grantjenks/python-diskcache DiskCache是一个高效的磁盘和文件缓存库,用Python编写,旨在提供比内存缓存更持久的存储解决方案 安装 安装DiskCache库非常简单,可以通过Python的包管理器pip进行安装: pip install diskcache 这条命令将安装DiskCache及其所有依赖。 基本功能 DiskCache库提供了一系列基本功能,使得缓存数据的管理变得非常简单和高效。 设置和获取缓存 DiskCache可以简单地设置和获取缓存项,这是使用缓存时的基本操作。 ) # DiskCache将自动管理缓存大小,根据LRU算法清理最少使用的缓存项 使用装饰器缓存函数结果 DiskCache提供了装饰器,可以非常方便地缓存特定函数的返回结果,减少重复计算。
成员职责划分: CacheAware:提供了一些基本接口的协议,MultiCache,MemoryCache,DiskCache等都遵守该协议. MultiCache:多重缓存,调用MemoryCache以及DiskCache相关方法. DiskCache:负责处理容量大,相对低速的磁盘缓存,线程安全,支持异步操作,自动和手动清理缓存功能. DiskStorage:DiskCache内部实现类. 单线程下的DiskCache性能测试(1000次,左侧数据为10k,右侧数据为100k) ? YYDiskCache和SwiftlyCache中DiskCache都是使用SQLite和文件结合的方式进行数据缓存,可以更好得扩展元数据,实现LRU淘汰算法,当缓存数据超过20k,将元数据写入数据库,
if (loadCacheAtStart) { this.serviceInfoMap = new ConcurrentHashMap<String, ServiceInfo>(DiskCache.read modHosts.size() > 0) { eventDispatcher.serviceChanged(serviceInfo); DiskCache.write (serviceInfo, cacheDir);HostReactor的构造器有个loadCacheAtStart参数(默认为false),如果为true则会使用DiskCache.read(this.cacheDir )从本地文件读取serviceInfo信息来初始化serviceInfoMap DiskCache nacos-1.1.3/client/src/main/java/com/alibaba/nacos/ client/naming/cache/DiskCache.java public class DiskCache { public static void write(ServiceInfo
具体实现 详细请看代码注释 // 该2变量用于模拟内存缓存 & 磁盘缓存中的数据 String memoryCache = null; String diskCache ObservableEmitter<String> emitter) throws Exception { // 先判断磁盘缓存有无数据 if (diskCache = null) { // 若有该数据,则发送 emitter.onNext(diskCache); null,即内存缓存中无数据,所以发送结束事件(视为无效事件) // b. firstElement()继续取出第2个事件 = disk,即判断磁盘缓存中有无数据缓存:由于diskCache
if (loadCacheAtStart) { this.serviceInfoMap = new ConcurrentHashMap<String, ServiceInfo>(DiskCache.read modHosts.size() > 0) { eventDispatcher.serviceChanged(serviceInfo); DiskCache.write (serviceInfo, cacheDir);HostReactor的构造器有个loadCacheAtStart参数(默认为false),如果为true则会使用DiskCache.read(this.cacheDir )从本地文件读取serviceInfo信息来初始化serviceInfoMap DiskCache nacos-1.1.3/client/src/main/java/com/alibaba/nacos/ client/naming/cache/DiskCache.java public class DiskCache { public static void write(ServiceInfo
import java.io.IOException; /** * Created by xpf on 2017/10/22 :) * Function: */ public class DiskCache mDiskCache = new DiskCache(); // 是否使用SD卡缓存 boolean isUseDiskCache = false; // 线程池,线程池数量为 ) * Function: */ public class DoubleCache { ImageCache mMemoryCache = new ImageCache(); DiskCache mDiskCache = new DiskCache(); /** * 优先使用内存加载,如果无再使用SD卡缓存 * * @param url * @ mDiskCache = new DiskCache(); // 双缓存 DoubleCache mDoubleCache = new DoubleCache(); // 是否使用
private LruCache<String, Bitmap> memCache; // 二级文件缓存基于 DiskLruCache private DiskLruCache diskCache cacheDir.exists()) { cacheDir.mkdirs(); } diskCache = DiskLruCache.open try { String key = hashKeyForDisk(url); DiskLruCache.Snapshot snapShot = diskCache.get hashKeyForDisk(imageUrl); // 下载成功后直接将图片流写入文件缓存 DiskLruCache.Editor editor = diskCache.edit else { editor.abort(); } } diskCache.flush
具体实现 详细请看代码注释 // 该2变量用于模拟内存缓存 & 磁盘缓存中的数据 String memoryCache = null; String diskCache ObservableEmitter<String> emitter) throws Exception { // 先判断磁盘缓存有无数据 if (diskCache = null) { // 若有该数据,则发送 emitter.onNext(diskCache); null,即内存缓存中无数据,所以发送结束事件(视为无效事件) // b. firstElement()继续取出第2个事件 = disk,即判断磁盘缓存中有无数据缓存:由于diskCache
ImageView 上的时候可以修改这个 Bitmap 或添加展示的动画效果; BitmapProcessor :可以处理原始的Bitmap ; MemoryCache : Bitmap 内存缓存接口; DiskCache MemoryCache memoryCache; //LruDiskCache,大小默认存储为Long.MAX_VALUE,默认最大数量为Long.MAX_VALUE; final DiskCache diskCache; //通过URI从网络或文件系统或应用程序资源中检索图像,默认为HttpURLConnection进行网络下载 //提供了imageDownloader方法可以自定义 public interface DiskCache { File getDirectory(); File get(String imageUri); boolean save = null) { saved = configuration.diskCache.save(uri, bmp); bmp.recycle
2.3 商品列表分级缓存2.3.1 核心实现class ProductCache { constructor() { this.memoryCache = new Map(); this.diskCache 2.3.3 详细解析1、类定义与构造函数class ProductCache { constructor() { this.memoryCache = new Map(); this.diskCache this.diskCache = localforage.createInstance(...) this.memoryCache.has(id)) { return this.memoryCache.get(id); } const diskData = await this.diskCache.getItem 磁盘缓存检查:若内存缓存中没有,则使用 await this.diskCache.getItem(id) 从磁盘缓存中获取数据。await 关键字确保异步操作完成后再继续执行。
要完美复现代码,需要安装的扩展包simpleITK,ipyvolume,diskcache,cassandra-driver 安装扩展包推荐使用conda install package-you-need 在disk.py文件里,可能代码比较老了,有个引用的包失效了,这里需要修改一下,不然这一句会报错,from diskcache.core import BytesType, MODE_BINARY, BytesIO ,修改后的代码如下 import gzipfrom diskcache import FanoutCache, Diskfrom cassandra.cqltypes import BytesTypefrom diskcache import FanoutCache, Disk,corefrom diskcache.core import iofrom io import BytesIOfrom diskcache.core
isLoadCacheAtStart(properties)) { this.serviceInfoMap = new ConcurrentHashMap<String, ServiceInfo>(DiskCache.read new ConcurrentHashMap<String, ServiceInfo>(16); } 这里涉及到了本地缓存目录,在processServiceInfo方法中,当服务实例变更时,会看到通过DiskCache serviceInfo.getGroupName(), serviceInfo.getClusters(), serviceInfo.getHosts())); // 记录Service本地文件 DiskCache.write UtilAndComs.ALL_HOSTS)) { continue; } // 将缓存内容写入磁盘文件 DiskCache.write StringUtils.isEmpty(failover)) { String[] lines = failover.split(DiskCache.getLineSeparator()
reply->ignoreSslErrors(); } }); Disk cache auto nam = new QNetworkAccessManager(this); auto diskCache = new QNetworkDiskCache(nam); diskCache->setCacheDirectory(QStandardPaths::writableLocation(QStandardPaths ::CacheLocation) + QLatin1String("/http/")); nam->setCache(diskCache); How To Use Exceptions Correctly
{ //返回true,表示移除最老的 return true; } //往磁盘进行添加 diskCache false; } }; 这里内部的removeEldestEntry()方法内部如果返回true,会默认移除掉最旧的一个成员,返回false表示不移除,同时还会把图片放入到手机本地中,这个逻辑通过diskCache ()方法实现的,这里图片在本地中名字使用md5加密后的名字 // 把图片缓存到本地磁盘 private static void diskCache(String key, SoftReference<
在文件管理器找到tencent/MobileQQ/diskcache文件夹,按照时间排序,找到后面带有HD的文件就是QQ闪照的文件了。
.memoryCacheSize(2 * 1024 * 1024) .memoryCacheSizePercentage(13) // default .diskCache QueueProcessingType tasksProcessingType; 任务队列的类型:enum{LIFO、FIFO} final MemoryCache memoryCache; 内存缓存 final DiskCache diskCache; 磁盘缓存 final ImageDownloader downloader; 图片下载器 final ImageDecoder decoder; 图片解析器 final 其他特性 #####4.1 DiskCache 和 MemoryCache DiskCache 和 MemoryCache都有一些默认的实现类 (1)interface DiscCache -> abstract
5、diskcache[15] Python支持磁盘的缓存(与django兼容)。比Redis和Memcached更快。纯python实现。 statsmodels: https://github.com/statsmodels/statsmodels [14] toga: https://github.com/beeware/toga [15] diskcache : https://github.com/grantjenks/python-diskcache [16] beijing_bus: https://github.com/wong2/beijing_bus
trustMemCache) { // not trust the cache // load from Network or DiskCache memDrawable); } } } else { // load from Network or DiskCache } return null; } //---------------------------------从网络中获取(createRequestParams里面有diskcache
一、Glide缓存机制深度解剖(面试必考点) 1.1 三级缓存架构核心原理 Glide默认采用内存缓存(ActiveResources+MemoryCache) + 磁盘缓存(DiskCache) + 网络加载的三级架构: • ActiveResources:强引用缓存,存储正在展示的图片(防GC回收) • MemoryCache:LRU内存缓存,默认占App可用内存的1/8 • DiskCache
"; } 磁盘缓存切片 DiskCache属性表 属性名 类型 默认值 备注 value String "" 内存缓存的key cacheTime long -1 缓存时间【单位:s】,默认是永久有效 enableEmpty boolean true 对于String、数组和集合等,是否允许缓存为空 1.使用@DiskCache标注需要磁盘缓存的方法。 4.使用@DiskCache标注的方法,可自动实现缓存策略。默认使用的磁盘缓存是JakeWharton的DiskLruCache。 @DiskCache private String hello(String name, String cardId) { return "hello, " + name + "!