Skip to content
PatternDirClean edited this page Jun 25, 2022 · 9 revisions

使用方法

请导入其 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();
    }
}

可清理对象 CanClean 接口

缓存的内容可以是这个接口的实例,接口中的 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 接口的实例即可

Clone this wiki locally