疯狂的狮子Li
2024-08-26 098d3347a0df808908aab8c554cd7c4febc5e6d9
ruoyi-common/ruoyi-common-redis/src/main/java/org/dromara/common/redis/manager/CaffeineCacheDecorator.java
@@ -1,6 +1,5 @@
package org.dromara.common.redis.manager;
import cn.hutool.core.lang.Console;
import org.dromara.common.core.utils.SpringUtils;
import org.springframework.cache.Cache;
@@ -16,15 +15,17 @@
    private static final com.github.benmanes.caffeine.cache.Cache<Object, Object>
        CAFFEINE = SpringUtils.getBean("caffeine");
    private final String name;
    private final Cache cache;
    public CaffeineCacheDecorator(Cache cache) {
    public CaffeineCacheDecorator(String name, Cache cache) {
        this.name = name;
        this.cache = cache;
    }
    @Override
    public String getName() {
        return cache.getName();
        return name;
    }
    @Override
@@ -32,26 +33,30 @@
        return cache.getNativeCache();
    }
    public String getUniqueKey(Object key) {
        return name + ":" + key;
    }
    @Override
    public ValueWrapper get(Object key) {
        Object o = CAFFEINE.get(key, k -> cache.get(key));
        Console.log("redisson caffeine -> key: " + key + ",value:" + o);
        Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key));
        return (ValueWrapper) o;
    }
    @SuppressWarnings("unchecked")
    public <T> T get(Object key, Class<T> type) {
        Object o = CAFFEINE.get(key, k -> cache.get(key, type));
        Console.log("redisson caffeine -> key: " + key + ",value:" + o);
        Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, type));
        return (T) o;
    }
    @Override
    public void put(Object key, Object value) {
        CAFFEINE.invalidate(getUniqueKey(key));
        cache.put(key, value);
    }
    public ValueWrapper putIfAbsent(Object key, Object value) {
        CAFFEINE.invalidate(getUniqueKey(key));
        return cache.putIfAbsent(key, value);
    }
@@ -63,7 +68,7 @@
    public boolean evictIfPresent(Object key) {
        boolean b = cache.evictIfPresent(key);
        if (b) {
            CAFFEINE.invalidate(key);
            CAFFEINE.invalidate(getUniqueKey(key));
        }
        return b;
    }
@@ -80,8 +85,7 @@
    @SuppressWarnings("unchecked")
    @Override
    public <T> T get(Object key, Callable<T> valueLoader) {
        Object o = CAFFEINE.get(key, k -> cache.get(key, valueLoader));
        Console.log("redisson caffeine -> key: " + key + ",value:" + o);
        Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, valueLoader));
        return (T) o;
    }