| | |
| | | package org.dromara.common.redis.manager; |
| | | |
| | | import cn.hutool.core.lang.Console; |
| | | import org.dromara.common.core.utils.SpringUtils; |
| | | import org.springframework.cache.Cache; |
| | | |
| | |
| | | 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 |
| | |
| | | } |
| | | |
| | | public String getUniqueKey(Object key) { |
| | | return cache.getName() + ":" + key; |
| | | return name + ":" + key; |
| | | } |
| | | |
| | | @Override |
| | | public ValueWrapper get(Object key) { |
| | | Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key)); |
| | | Console.log("redisson caffeine -> key: " + getUniqueKey(key) + ",value:" + o); |
| | | return (ValueWrapper) o; |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public <T> T get(Object key, Class<T> type) { |
| | | Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, type)); |
| | | Console.log("redisson caffeine -> key: " + getUniqueKey(key) + ",value:" + o); |
| | | 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); |
| | | } |
| | | |
| | |
| | | @Override |
| | | public <T> T get(Object key, Callable<T> valueLoader) { |
| | | Object o = CAFFEINE.get(getUniqueKey(key), k -> cache.get(key, valueLoader)); |
| | | Console.log("redisson caffeine -> key: " + getUniqueKey(key) + ",value:" + o); |
| | | return (T) o; |
| | | } |
| | | |