mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
Cache增加get重载,可自定义超时时间
This commit is contained in:
parent
7c1fafce99
commit
5cf19ea460
@ -5,6 +5,7 @@
|
|||||||
# 5.8.24(2023-11-14)
|
# 5.8.24(2023-11-14)
|
||||||
|
|
||||||
### 🐣新特性
|
### 🐣新特性
|
||||||
|
* 【cache 】 Cache增加get重载,可自定义超时时间(issue#I8G0DL@Gitee)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
* 【core 】 修复LocalDateTime#parseDate未判断空问题问题(issue#I8FN7F@Gitee)
|
* 【core 】 修复LocalDateTime#parseDate未判断空问题问题(issue#I8FN7F@Gitee)
|
||||||
|
@ -92,6 +92,21 @@ public interface Cache<K, V> extends Iterable<V>, Serializable {
|
|||||||
*/
|
*/
|
||||||
V get(K key, boolean isUpdateLastAccess, Func0<V> supplier);
|
V get(K key, boolean isUpdateLastAccess, Func0<V> supplier);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 从缓存中获得对象,当对象不在缓存中或已经过期返回Func0回调产生的对象
|
||||||
|
* <p>
|
||||||
|
* 调用此方法时,会检查上次调用时间,如果与当前时间差值大于超时时间返回{@code null},否则返回值。
|
||||||
|
* <p>
|
||||||
|
* 每次调用此方法会可选是否刷新最后访问时间,{@code true}表示会重新计算超时时间。
|
||||||
|
*
|
||||||
|
* @param key 键
|
||||||
|
* @param isUpdateLastAccess 是否更新最后访问时间,即重新计算超时时间。
|
||||||
|
* @param timeout 自定义超时时间
|
||||||
|
* @param supplier 如果不存在回调方法,用于生产值对象
|
||||||
|
* @return 值对象
|
||||||
|
*/
|
||||||
|
V get(K key, boolean isUpdateLastAccess, long timeout, Func0<V> supplier);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 从缓存中获得对象,当对象不在缓存中或已经过期返回{@code null}
|
* 从缓存中获得对象,当对象不在缓存中或已经过期返回{@code null}
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -109,6 +109,11 @@ public abstract class AbstractCache<K, V> implements Cache<K, V> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public V get(K key, boolean isUpdateLastAccess, Func0<V> supplier) {
|
public V get(K key, boolean isUpdateLastAccess, Func0<V> supplier) {
|
||||||
|
return get(key, isUpdateLastAccess, this.timeout, supplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V get(K key, boolean isUpdateLastAccess, long timeout, Func0<V> supplier) {
|
||||||
V v = get(key, isUpdateLastAccess);
|
V v = get(key, isUpdateLastAccess);
|
||||||
if (null == v && null != supplier) {
|
if (null == v && null != supplier) {
|
||||||
//每个key单独获取一把锁,降低锁的粒度提高并发能力,see pr#1385@Github
|
//每个key单独获取一把锁,降低锁的粒度提高并发能力,see pr#1385@Github
|
||||||
@ -125,7 +130,7 @@ public abstract class AbstractCache<K, V> implements Cache<K, V> {
|
|||||||
throw ExceptionUtil.wrapRuntime(e);
|
throw ExceptionUtil.wrapRuntime(e);
|
||||||
//throw new RuntimeException(e);
|
//throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
put(key, v, this.timeout);
|
put(key, v, timeout);
|
||||||
} else {
|
} else {
|
||||||
v = co.get(isUpdateLastAccess);
|
v = co.get(isUpdateLastAccess);
|
||||||
}
|
}
|
||||||
|
@ -58,6 +58,11 @@ public class NoCache<K, V> implements Cache<K, V> {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public V get(K key, boolean isUpdateLastAccess, Func0<V> supplier) {
|
public V get(K key, boolean isUpdateLastAccess, Func0<V> supplier) {
|
||||||
|
return get(key, isUpdateLastAccess, 0, supplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public V get(K key, boolean isUpdateLastAccess, long timeout, Func0<V> supplier) {
|
||||||
try {
|
try {
|
||||||
return (null == supplier) ? null : supplier.call();
|
return (null == supplier) ? null : supplier.call();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user