-
Notifications
You must be signed in to change notification settings - Fork 0
Home
请导入其 jar 文件,文件在 发行版 或项目的 jar 文件夹下可以找到
发行版中可以看到全部版本
项目下的 jar 文件夹是当前最新的每夜版
PDCache_bin.jar 为包含了依赖库的包,PDCache.jar 为不包含依赖库的包,PDCache_all.jar 为包含了依赖库与源码的包
根据自己的环境进行导入
具体导入方法请 百度 或者 Google
依赖的同系列的项目
使用 MapCache 按 键->值 缓存数据
public static void main(String[] args) { // 构造缓存对象,内部默认为 SoftReference 软引用 MapCache<String, String> cache = PDCache.MapCache(String.class, String.class).build(); try { // 存入要缓存的对象 cache.put("h", "hello word"); // 取出之前缓存的对象 String s = cache.get("h"); } catch ( Exception e ) { e.printStackTrace(); } }
所有的缓存都通过一个对应的 Build 类构造,可以通过 PDCache 类找到快速构造方法,也可以通过 [类名].build() 方法获取
接下来示例如何使用回收回调功能。
这里建立一个数据对象,其中只有一个字段 name
/** 示例用数据对象 */ public class DataA implements CanClean { // 唯一的数据,名称 public String name; public DataA(String name) { this.name = name;} // 继承接口的方法,返回被回收时的回调 @Override @NotNull public Runnable getclean() { // 被回收时打印一句话 return () -> System.out.println(name + " 被回收了!"); } }
接着像之前那样使用即可
public static void main(String[] args) { // 构造缓存对象,内部默认为 SoftReference 软引用,被缓存的对象为 String MapCache<String, DataA> cache = PDCache.MapCache(String.class, DataA.class).build(); try { // 存入要缓存的对象 cache.put("h", new DataA("hello word")); // 触发回收 System.gc(); // 此时应该打印出 "hello word 被回收了!" } catch ( Exception e ) { e.printStackTrace(); } }
缓存的内容可以是这个接口的实例,接口中的 getclean() 方法要求返回一个 Runnable 接口实例。
返回的 Runnable 作用于 Cleanable.register() 方法的第二个参数,既对象被 jvm 回收时运行的销毁用回调。
获取到接口后工具在注册缓存前会调用 Cleaner.create().register([ CanClean ], [ Runnable ]); 方法,并且记录返回的控制对象。
在手动清除数据或者关闭缓存工具的时候会进行调用。获取数据时会等待对应的缓存位置释放完成再进行获取
该类缓存没有 put 类型的方法
该类缓存不可手动放入数据,需要在构造的时候注册填充方法。在获取时如果没有对应的缓存则会调用填充方法生成数据并加入缓存中。
根据工具的不同,使用的填充接口也不同
该类缓存为对应缓存工具的变种实现,与原工具的区别为名字前多了个 S 。比如 Cache 的自填充变种则为 SCache
public static void main(String[] args) { // 构造缓存对象,内部默认为 SoftReference 软引用 SMapCache<String, String> cache = PDCache.SMapCache(String.class, String.class) // 指定的生成方法,返回 "key:[键]" .createdata(v -> "key:" + v).build(); try { // 取出来的是 "key:h" String s = cache.get("h"); } catch ( Exception e ) { e.printStackTrace(); } }
自填充类型同样支持回收回调,只要生成的对象是 CanClean 接口的实例即可