Jfinal缓存问题请教波总!

<!-- 系统默认缓存 :1小时 -->
<defaultCache
        maxElementsInMemory="50000"
        clearOnFlush="false"
        eternal="false"
        timeToIdleSeconds="3600"
        timeToLiveSeconds="3600"
        overflowToDisk="true"
        diskSpoolBufferSizeMB="1024"
        maxElementsOnDisk="100000"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"

        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
</defaultCache>

上面是resouce下ehcache.xml的缓存配置

config中的相关代码

me.add(new EhCachePlugin());// 缓存配置

我的出问题的Java代码

代码片段1、

try {
    ImageIO.write(buffImg, "jpg", bs);
    String imgsrc = "data:image/jpg;base64," + base64.encodeToString(bs.toByteArray());
    UUID uuid = UUID.randomUUID();
    CacheKit.put(CACHE_NAME, uuid, code);
    System.out.println(uuid+"==>"+CacheKit.get(CACHE_NAME, uuid).toString());
    return AjaxResult.capatchaSuccess(uuid.toString(), imgsrc);
} catch (IOException e) {
    return AjaxResult.error("验证码生成错误");
}

代码片段2、

public static AjaxResult verifyCaptchaCode(String uuid, String captchaCode) {
    if (uuid == null || captchaCode == null) {
        return AjaxResult.error("参数错鋘!");
    }
    String cacheCode = CacheKit.get(CACHE_NAME, uuid);
    System.out.println(uuid+"==>"+cacheCode);
    return (cacheCode == null || !cacheCode.toString().equalsIgnoreCase(cacheCode)) ? AjaxResult.error("验证码错误,请检查") : AjaxResult.success("验证通过!");
}

控制台打印出来的信息

e3cbf7dc-7cff-41ca-9681-2b0edc3b3ed0==>FqiM
e3cbf7dc-7cff-41ca-9681-2b0edc3b3ed0==>null

波总,我第一次存入的时候立马输出是可以从缓存到中取到的,但是我在代码片段2当中取不到这个缓存值,始终为null,我的uuid是唯一值,不知道问题出在哪里?

评论区

JFinal

2020-06-22 21:39

代码看上去没错,可能是 uuid 值不同,单步调试一下看看值到底是多少

此外,不要使用 System.out.println(..) 这种方式,用单步调试才专业

spring0563

2020-06-22 21:45

确实是值不同,但我就不太明白了,uuid不是唯一的吗?为什么会出现值的不同呢?

JFinal

2020-06-22 23:04

@spring0563 uuid 是唯一的,关键是你两次使用这个 uuid 的时候要使用同一个值

从 cache 中取值,要使用相同的 cacheName 与相同的 key, 而此时的 key 就是 uuid, 要求该值相同