KVCache 是一个便于统一管理的键值缓存库;支持无缝切换缓存实现。
Provider 说明
/** * 使用 MMKV 提供缓存实现;需依赖 MMKV */ Provider.MMKV_CACHE /** * 使用 DataStore 提供缓存实现;需依赖 DataStore */ Provider.DATA_STORE_CACHE /** * 使用 SharedPreferences 提供缓存实现 */ Provider.SHARED_PREFERENCES_CACHE
在初始化 KVCache 时,可能会用到 Provider
KVCache 初始化
// 建议在 Application 中进行初始化 KVCache.initialize(this, provider)
初始化 KVCache 时,如果不传 provider, 则会自动决定缓存实现:优先级从高到低依次为: MMKV -> DataStore -> SharedPreferences
KVCache 的使用(键值对的读写)
val f = 1.0F KVCache.put("float", f) Log.d(TAG, "$cacheProvider: float = ${KVCache.getFloat("float")}") val i = 2 KVCache.put("int", i) Log.d(TAG, "$cacheProvider: int = ${KVCache.getInt("int")}") val d = 3.0 KVCache.put("double", d) Log.d(TAG, "$cacheProvider: double = ${KVCache.getDouble("double")}") val l = 4L KVCache.put("long", l) Log.d(TAG, "$cacheProvider: long = ${KVCache.getLong("long")}") val b = true KVCache.put("boolean", b) Log.d(TAG, "$cacheProvider: boolean = ${KVCache.getBoolean("boolean")}") val s = KVCache::class.java.simpleName KVCache.put("string", s) Log.d(TAG, "$cacheProvider: string = ${KVCache.getString("string")}") val stringSet = setOf("1", "2", "3") KVCache.put("stringSet", stringSet) Log.d(TAG, "$cacheProvider: stringSet = ${KVCache.getStringSet("stringSet")}")
KVCache 的使用(补充:MMKV 额外缓存支持的类型)
// 如果使用的是 MMKV 缓存实现,则额外支持缓存 ByteArray 和 Parcelable if (KVCache.cacheProvider() == KVCache.Provider.MMKV_CACHE) { val byteArray: ByteArray = byteArrayOf(1, 2, 3) KVCache.put("byteArray", byteArray) Log.d(TAG, "$cacheProvider: byteArray = ${KVCache.getByteArray("byteArray")?.toList()}") val p = ParcelableBean("ParcelableBean", 10, true) KVCache.put("parcelable", p) Log.d(TAG, "$cacheProvider: parcelable = ${KVCache.getParcelable<ParcelableBean>("parcelable")}") }
kvCache 属性委托使用示例
// 属性委托:相当于 KVCache.getInt("arg1"); 类型为:Int(key的默认值如果忽略或为空时,则默认值为变量的名称) var arg1 by kvCacheInt() // 属性委托:相当于 KVCache.getFloat("param1"); 类型为:Float(默认值为:0F) var arg2 : Float by kvCache("argFloat", 0F) // 属性委托:相当于 KVCache.getDouble("arg3"); 类型为:Double(key的默认值如果忽略或为空时,则默认值为变量的名称) var arg3 by kvCache(defaultValue = 0.0) // 函数 kvCache 与 kvCacheXXX (XXX: 表示类型,如:kvCacheInt)用法基本一致,只是表现形式不同,由于 kvCache 有多个函数名称相同,所以需要传默认值,根据默认值的类型来推断使用的是哪个函数 var arg4 by kvCache("argBool", false) // 这里让 arg4 和 arg5 指向相同的key var arg5 by kvCacheBoolean("argBool") //... 使用 // 属性委托:arg1 = 5 相当于:KVCache.put("arg1", 5),再打印查看 KVCache.getInt("arg1") 的值 arg1 = 5 Log.d(TAG, "$cacheProvider: kvCache -> arg1 = ${KVCache.getInt("arg1")}") // 属性委托:arg2 = 6F 相当于:KVCache.put("argFloat", 6F),再打印查看 KVCache.getFloat("argFloat") 的值 arg2 = 6F Log.d(TAG, "$cacheProvider: kvCache -> arg2 = ${KVCache.getFloat("argFloat")}") // 属性委托:通过 KVCache 缓存值后,再打印查看 arg3 的值; 相当于:属性的 getValue 取 KVCache.getDouble("arg3") 的值 KVCache.put("arg3", 7.0) Log.d(TAG, "$cacheProvider: kvCache -> arg3 = $arg3") // 属性委托:arg4 = true 相当于:KVCache.put("argBool", true),再打印查看 KVCache.getBoolean("argBool") 的值 arg4 = true Log.d(TAG, "$cacheProvider: kvCache -> arg4 = ${KVCache.getBoolean("argBool")}") // 因为 arg4 和 arg5 使用相同的 key,所以改变 arg4 = true 后,arg5 的值也将改变;即都是取的 KVCache.getBoolean("argBool") 的值 Log.d(TAG, "$cacheProvider: kvCache -> arg5 = $arg5")
我在我的应用程序中使用了spring缓存层,我在编写使用Mockito测试spring缓存层的单元测试时遇到了一个问题。 服务层的JUnit测试代码: 例外情况: 我得到了一个“”,因为缓存层没有工作,并且调用被传递到repository对象(两次),该对象返回了上面的'Customer2'模拟对象,即通过传递服务层,对同一个键调用了两次repository方法。
Shiro 有三个重要的缓存接口: CacheManager - 负责所有缓存的主要管理组件,它返回 Cache 实例。 Cache - 维护key/value 对。 CacheManagerAware - 通过想要接收和使用 CacheManager 实例的组件来实现。 CacheManager 返回Cache 实例,各种不同的 Shiro 组件使用这些Cache 实例来缓存必要的数据。任何实现
在本章中,我们将研究Joomla Cache Manager 。 您可以安装缓存控制器插件,这有助于提高Joomla的性能。 您还可以关闭特定页面和组件上的缓存。 Joomla缓存管理 以下是用于设置Joomla缓存管理器的简单步骤 - Step (1) - 单击Joomla Global Configuration Cache Management 。 您将看到如下所示的屏幕。 以下是Jooml
为spring boot应用程序集成EhCache3缓存提供程序。我需要决定使用哪个缓存管理器。理想情况下,我希望在我的缓存方法上使用Springs缓存注释,例如@Cacheable,而不是jsr(@CacheResult),但对于cachemanager/cache库,我无法决定以下内容 我决定使用ehcache3提供程序进行缓存库注释: 对哪种实施方式有何建议?也许我不清楚上面的实现有什么不同
Adobe Bridge 可处理并维护所有音频和视频回放文件的高速缓存。这项功能可以提升回放文件的性能,因为只要您以后想查看这些文件,就可以随时访问。建议您定期清理陈旧和不使用的媒体高速缓存文件,以便优化性能。在删除了高速缓存文件后,如果源媒体需要,则随时可以重新生成相应的高速缓存文件。 设置媒体高速缓存首选项 可执行以下步骤来设置媒体高速缓存首选项: 执行以下操作之一: (Windows) 选择
有没有办法禁用截取缓存管理?我的应用程序使用Google Volley库来管理传输层,但我有自己的缓存管理器实现,因为服务器不使用缓存控制头。我想节省截击缓存使用的空间,因为它完全没有用。 有什么简单的方法吗?或者我应该实现我自己版本的? 如有任何建议,我们将不胜感激。