localGet
This commit is contained in:
@@ -25,7 +25,7 @@ module org.redkale {
|
|||||||
exports org.redkale.convert.ext;
|
exports org.redkale.convert.ext;
|
||||||
exports org.redkale.convert.json;
|
exports org.redkale.convert.json;
|
||||||
exports org.redkale.convert.protobuf;
|
exports org.redkale.convert.protobuf;
|
||||||
exports org.redkale.locking;
|
exports org.redkale.lock;
|
||||||
exports org.redkale.mq;
|
exports org.redkale.mq;
|
||||||
exports org.redkale.net;
|
exports org.redkale.net;
|
||||||
exports org.redkale.net.client;
|
exports org.redkale.net.client;
|
||||||
|
|||||||
169
src/main/java/org/redkale/cache/CacheManager.java
vendored
169
src/main/java/org/redkale/cache/CacheManager.java
vendored
@@ -6,6 +6,7 @@ package org.redkale.cache;
|
|||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 缓存管理器
|
* 缓存管理器
|
||||||
@@ -24,296 +25,324 @@ public interface CacheManager {
|
|||||||
* 本地获取缓存数据, 过期返回null
|
* 本地获取缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
public <T> T localGet(final String map, final String key, final Type type);
|
public <T> T localGet(final String hash, final String key, final Type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地获取字符串缓存数据, 过期返回null
|
* 本地获取字符串缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
default String localGetString(final String map, final String key) {
|
default String localGetString(final String hash, final String key) {
|
||||||
return localGet(map, key, String.class);
|
return localGet(hash, key, String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地获取缓存数据, 过期返回null
|
||||||
|
*
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param hash 缓存hash
|
||||||
|
* @param key 缓存键
|
||||||
|
* @param type 数据类型
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return 数据值
|
||||||
|
*/
|
||||||
|
public <T> T localGet(final String hash, final String key, final Type type, Duration expire, Supplier<T> supplier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 远程异步获取缓存数据, 过期返回null
|
||||||
|
*
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param hash 缓存hash
|
||||||
|
* @param key 缓存键
|
||||||
|
* @param type 数据类型
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return 数据值
|
||||||
|
*/
|
||||||
|
public <T> CompletableFuture<T> localGetAsync(String hash, String key, Type type, Duration expire, Supplier<CompletableFuture<T>> supplier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地缓存数据
|
* 本地缓存数据
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
public <T> void localSet(String map, String key, Type type, T value, Duration expire);
|
public <T> void localSet(String hash, String key, Type type, T value, Duration expire);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地缓存字符串数据
|
* 本地缓存字符串数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
default void localSetString(final String map, final String key, final String value, Duration expire) {
|
default void localSetString(final String hash, final String key, final String value, Duration expire) {
|
||||||
localSet(map, key, String.class, value, expire);
|
localSet(hash, key, String.class, value, expire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地删除缓存数据
|
* 本地删除缓存数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 删除数量
|
* @return 删除数量
|
||||||
*/
|
*/
|
||||||
public long localDel(String map, String key);
|
public long localDel(String hash, String key);
|
||||||
|
|
||||||
//-------------------------------------- 远程缓存 --------------------------------------
|
//-------------------------------------- 远程缓存 --------------------------------------
|
||||||
/**
|
/**
|
||||||
* 远程获取缓存数据, 过期返回null
|
* 远程获取缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
public <T> T remoteGet(final String map, final String key, final Type type);
|
public <T> T remoteGet(final String hash, final String key, final Type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程获取字符串缓存数据, 过期返回null
|
* 远程获取字符串缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
default String remoteGetString(final String map, final String key) {
|
default String remoteGetString(final String hash, final String key) {
|
||||||
return remoteGet(map, key, String.class);
|
return remoteGet(hash, key, String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步获取缓存数据, 过期返回null
|
* 远程异步获取缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
public <T> CompletableFuture<T> remoteGetAsync(final String map, final String key, final Type type);
|
public <T> CompletableFuture<T> remoteGetAsync(final String hash, final String key, final Type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步获取字符串缓存数据, 过期返回null
|
* 远程异步获取字符串缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
default CompletableFuture<String> remoteGetStringAsync(final String map, final String key) {
|
default CompletableFuture<String> remoteGetStringAsync(final String hash, final String key) {
|
||||||
return remoteGetAsync(map, key, String.class);
|
return remoteGetAsync(hash, key, String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程缓存数据
|
* 远程缓存数据
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
public <T> void remoteSet(final String map, final String key, final Type type, final T value, Duration expire);
|
public <T> void remoteSet(final String hash, final String key, final Type type, final T value, Duration expire);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程缓存字符串数据
|
* 远程缓存字符串数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
default void remoteSetString(final String map, final String key, final String value, Duration expire) {
|
default void remoteSetString(final String hash, final String key, final String value, Duration expire) {
|
||||||
remoteSet(map, key, String.class, value, expire);
|
remoteSet(hash, key, String.class, value, expire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步缓存数据
|
* 远程异步缓存数据
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
public <T> CompletableFuture<Void> remoteSetAsync(String map, String key, Type type, T value, Duration expire);
|
public <T> CompletableFuture<Void> remoteSetAsync(String hash, String key, Type type, T value, Duration expire);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步缓存字符串数据
|
* 远程异步缓存字符串数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param expire 过期时长,为null表示永不过期
|
* @param expire 过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
default CompletableFuture<Void> remoteSetStringAsync(final String map, final String key, final String value, Duration expire) {
|
default CompletableFuture<Void> remoteSetStringAsync(final String hash, final String key, final String value, Duration expire) {
|
||||||
return remoteSetAsync(map, key, String.class, value, expire);
|
return remoteSetAsync(hash, key, String.class, value, expire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程删除缓存数据
|
* 远程删除缓存数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 删除数量
|
* @return 删除数量
|
||||||
*/
|
*/
|
||||||
public long remoteDel(String map, String key);
|
public long remoteDel(String hash, String key);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步删除缓存数据
|
* 远程异步删除缓存数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 删除数量
|
* @return 删除数量
|
||||||
*/
|
*/
|
||||||
public CompletableFuture<Long> remoteDelAsync(String map, String key);
|
public CompletableFuture<Long> remoteDelAsync(String hash, String key);
|
||||||
|
|
||||||
//-------------------------------------- both缓存 --------------------------------------
|
//-------------------------------------- both缓存 --------------------------------------
|
||||||
/**
|
/**
|
||||||
* 远程获取缓存数据, 过期返回null
|
* 远程获取缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
public <T> T bothGet(final String map, final String key, final Type type);
|
public <T> T bothGet(final String hash, final String key, final Type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程获取字符串缓存数据, 过期返回null
|
* 远程获取字符串缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
default String bothGetString(final String map, final String key) {
|
default String bothGetString(final String hash, final String key) {
|
||||||
return bothGet(map, key, String.class);
|
return bothGet(hash, key, String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步获取缓存数据, 过期返回null
|
* 远程异步获取缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
public <T> CompletableFuture<T> bothGetAsync(final String map, final String key, final Type type);
|
public <T> CompletableFuture<T> bothGetAsync(final String hash, final String key, final Type type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步获取字符串缓存数据, 过期返回null
|
* 远程异步获取字符串缓存数据, 过期返回null
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 数据值
|
* @return 数据值
|
||||||
*/
|
*/
|
||||||
default CompletableFuture<String> bothGetStringAsync(final String map, final String key) {
|
default CompletableFuture<String> bothGetStringAsync(final String hash, final String key) {
|
||||||
return bothGetAsync(map, key, String.class);
|
return bothGetAsync(hash, key, String.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程缓存数据
|
* 远程缓存数据
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param localExpire 本地过期时长,为null表示永不过期
|
* @param localExpire 本地过期时长,为null表示永不过期
|
||||||
* @param remoteExpire 远程过期时长,为null表示永不过期
|
* @param remoteExpire 远程过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
public <T> void bothSet(final String map, final String key, final Type type, final T value, Duration localExpire, Duration remoteExpire);
|
public <T> void bothSet(final String hash, final String key, final Type type, final T value, Duration localExpire, Duration remoteExpire);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程缓存字符串数据
|
* 远程缓存字符串数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param localExpire 本地过期时长,为null表示永不过期
|
* @param localExpire 本地过期时长,为null表示永不过期
|
||||||
* @param remoteExpire 远程过期时长,为null表示永不过期
|
* @param remoteExpire 远程过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
default void bothSetString(final String map, final String key, final String value, Duration localExpire, Duration remoteExpire) {
|
default void bothSetString(final String hash, final String key, final String value, Duration localExpire, Duration remoteExpire) {
|
||||||
bothSet(map, key, String.class, value, localExpire, remoteExpire);
|
bothSet(hash, key, String.class, value, localExpire, remoteExpire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步缓存数据
|
* 远程异步缓存数据
|
||||||
*
|
*
|
||||||
* @param <T> 泛型
|
* @param <T> 泛型
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param type 数据类型
|
* @param type 数据类型
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param localExpire 本地过期时长,为null表示永不过期
|
* @param localExpire 本地过期时长,为null表示永不过期
|
||||||
* @param remoteExpire 远程过期时长,为null表示永不过期
|
* @param remoteExpire 远程过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
public <T> CompletableFuture<Void> bothSetAsync(String map, String key, Type type, T value, Duration localExpire, Duration remoteExpire);
|
public <T> CompletableFuture<Void> bothSetAsync(String hash, String key, Type type, T value, Duration localExpire, Duration remoteExpire);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步缓存字符串数据
|
* 远程异步缓存字符串数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
* @param value 数据值
|
* @param value 数据值
|
||||||
* @param localExpire 本地过期时长,为null表示永不过期
|
* @param localExpire 本地过期时长,为null表示永不过期
|
||||||
* @param remoteExpire 远程过期时长,为null表示永不过期
|
* @param remoteExpire 远程过期时长,为null表示永不过期
|
||||||
*/
|
*/
|
||||||
default CompletableFuture<Void> bothSetStringAsync(String map, String key, String value, Duration localExpire, Duration remoteExpire) {
|
default CompletableFuture<Void> bothSetStringAsync(String hash, String key, String value, Duration localExpire, Duration remoteExpire) {
|
||||||
return bothSetAsync(map, key, String.class, value, localExpire, remoteExpire);
|
return bothSetAsync(hash, key, String.class, value, localExpire, remoteExpire);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程删除缓存数据
|
* 远程删除缓存数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 删除数量
|
* @return 删除数量
|
||||||
*/
|
*/
|
||||||
public long bothDel(String map, String key);
|
public long bothDel(String hash, String key);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 远程异步删除缓存数据
|
* 远程异步删除缓存数据
|
||||||
*
|
*
|
||||||
* @param map 缓存hash
|
* @param hash 缓存hash
|
||||||
* @param key 缓存键
|
* @param key 缓存键
|
||||||
*
|
*
|
||||||
* @return 删除数量
|
* @return 删除数量
|
||||||
*/
|
*/
|
||||||
public CompletableFuture<Long> bothDelAsync(String map, String key);
|
public CompletableFuture<Long> bothDelAsync(String hash, String key);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
27
src/main/java/org/redkale/cache/support/CacheAction.java
vendored
Normal file
27
src/main/java/org/redkale/cache/support/CacheAction.java
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.redkale.cache.support;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
import org.redkale.convert.json.JsonConvert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* 缓存的方法对象
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* 详情见: https://redkale.org
|
||||||
|
*
|
||||||
|
* @author zhangjx
|
||||||
|
*
|
||||||
|
* @since 2.8.0
|
||||||
|
*/
|
||||||
|
public class CacheAction {
|
||||||
|
|
||||||
|
private Method method;
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return JsonConvert.root().convertTo(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,9 +5,11 @@ package org.redkale.cache.support;
|
|||||||
|
|
||||||
import java.lang.reflect.Type;
|
import java.lang.reflect.Type;
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import org.redkale.annotation.AutoLoad;
|
import org.redkale.annotation.AutoLoad;
|
||||||
import org.redkale.annotation.Component;
|
import org.redkale.annotation.Component;
|
||||||
import org.redkale.annotation.Nullable;
|
import org.redkale.annotation.Nullable;
|
||||||
@@ -35,9 +37,12 @@ import org.redkale.util.Utility;
|
|||||||
@ResourceType(CacheManager.class)
|
@ResourceType(CacheManager.class)
|
||||||
public class CacheManagerService implements CacheManager, Service {
|
public class CacheManagerService implements CacheManager, Service {
|
||||||
|
|
||||||
//缓存配置项
|
//是否开启缓存
|
||||||
protected boolean enabled = true;
|
protected boolean enabled = true;
|
||||||
|
|
||||||
|
//是否缓存null值
|
||||||
|
protected boolean nullable = false;
|
||||||
|
|
||||||
//配置
|
//配置
|
||||||
protected AnyValue config;
|
protected AnyValue config;
|
||||||
|
|
||||||
@@ -50,6 +55,9 @@ public class CacheManagerService implements CacheManager, Service {
|
|||||||
//缓存hash集合, 用于定时遍历删除过期数据
|
//缓存hash集合, 用于定时遍历删除过期数据
|
||||||
protected final ConcurrentSkipListSet<String> hashNames = new ConcurrentSkipListSet<>();
|
protected final ConcurrentSkipListSet<String> hashNames = new ConcurrentSkipListSet<>();
|
||||||
|
|
||||||
|
//缓存无效时使用的锁
|
||||||
|
private final ConcurrentHashMap<String, CacheValue> hashLock = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
@Resource(required = false)
|
@Resource(required = false)
|
||||||
protected Application application;
|
protected Application application;
|
||||||
|
|
||||||
@@ -133,6 +141,56 @@ public class CacheManagerService implements CacheManager, Service {
|
|||||||
return CacheValue.get(val);
|
return CacheValue.get(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 本地获取缓存数据, 过期返回null
|
||||||
|
*
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param hash 缓存hash
|
||||||
|
* @param key 缓存键
|
||||||
|
* @param type 数据类型
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return 数据值
|
||||||
|
*/
|
||||||
|
public <T> T localGet(final String hash, final String key, final Type type, Duration expire, Supplier<T> supplier) {
|
||||||
|
Objects.requireNonNull(supplier);
|
||||||
|
Type t = loadCacheType(type);
|
||||||
|
CacheValue<T> val = localSource.hget(hash, key, t);
|
||||||
|
if (CacheValue.isValid(val)) {
|
||||||
|
return val.getValue();
|
||||||
|
}
|
||||||
|
String lockKey = lockKey(hash, key);
|
||||||
|
val = hashLock.computeIfAbsent(lockKey, k -> cacheSupplier(expire, supplier).get());
|
||||||
|
try {
|
||||||
|
if (CacheValue.isValid(val)) {
|
||||||
|
localSource.hset(hash, key, t, val);
|
||||||
|
return val.getValue();
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
hashLock.remove(lockKey);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 远程异步获取缓存数据, 过期返回null
|
||||||
|
*
|
||||||
|
* @param <T> 泛型
|
||||||
|
* @param hash 缓存hash
|
||||||
|
* @param key 缓存键
|
||||||
|
* @param type 数据类型
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return 数据值
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public <T> CompletableFuture<T> localGetAsync(String hash, String key, Type type, Duration expire, Supplier<CompletableFuture<T>> supplier) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet.");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 本地缓存数据
|
* 本地缓存数据
|
||||||
*
|
*
|
||||||
@@ -377,6 +435,45 @@ public class CacheManagerService implements CacheManager, Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//-------------------------------------- 内部方法 --------------------------------------
|
//-------------------------------------- 内部方法 --------------------------------------
|
||||||
|
/**
|
||||||
|
* 创建一个锁key
|
||||||
|
*
|
||||||
|
* @param hash 缓存hash
|
||||||
|
* @param key 缓存键
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected String lockKey(String hash, String key) {
|
||||||
|
return hash + (char) 8 + key;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将原始数据函数转换成获取CacheValue数据函数
|
||||||
|
*
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return CacheValue函数
|
||||||
|
*/
|
||||||
|
protected <T> CacheValue<T> cacheFunc(Duration expire, T value) {
|
||||||
|
if (value == null) {
|
||||||
|
return nullable ? CacheValue.create(value, expire) : null;
|
||||||
|
}
|
||||||
|
return CacheValue.create(value, expire);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将原始数据函数转换成获取CacheValue数据函数
|
||||||
|
*
|
||||||
|
* @param expire 过期时长,为null表示永不过期
|
||||||
|
* @param supplier 数据函数
|
||||||
|
*
|
||||||
|
* @return CacheValue函数
|
||||||
|
*/
|
||||||
|
protected <T> Supplier<CacheValue<T>> cacheSupplier(Duration expire, Supplier<T> supplier) {
|
||||||
|
return () -> cacheFunc(expire, supplier.get());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建数据类型创建对应CacheValue泛型
|
* 创建数据类型创建对应CacheValue泛型
|
||||||
*
|
*
|
||||||
@@ -399,4 +496,5 @@ public class CacheManagerService implements CacheManager, Service {
|
|||||||
protected Type loadCacheType(Type type) {
|
protected Type loadCacheType(Type type) {
|
||||||
return cacheValueTypes.computeIfAbsent(type, t -> TypeToken.createParameterizedType(null, CacheValue.class, type));
|
return cacheValueTypes.computeIfAbsent(type, t -> TypeToken.createParameterizedType(null, CacheValue.class, type));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
package org.redkale.locking;
|
package org.redkale.lock;
|
||||||
|
|
||||||
import java.lang.annotation.Documented;
|
import java.lang.annotation.Documented;
|
||||||
import static java.lang.annotation.ElementType.METHOD;
|
import static java.lang.annotation.ElementType.METHOD;
|
||||||
Reference in New Issue
Block a user