Class NullSafeCache<K,V>
java.lang.Object
cloud.opencode.base.cache.NullSafeCache<K,V>
- Type Parameters:
K- the type of keys | 键类型V- the type of values | 值类型Security | 安全性:
- Thread-safe: Yes (delegates to thread-safe cache) - 线程安全: 是(委托给线程安全的缓存)
- Null-safe: Yes (primary purpose) - 空值安全: 是(主要功能)
- All Implemented Interfaces:
Cache<K,V>
Null-Safe Cache - Cache that can store and distinguish null values
空值安全缓存 - 可以存储和区分 null 值的缓存
Wraps null values in a sentinel object to distinguish between "key not present" and "key present with null value".
将 null 值包装在哨兵对象中,以区分"键不存在"和"键存在但值为 null"。
Features | 主要功能:
- Store null values - 存储 null 值
- Distinguish miss from null - 区分未命中和 null
- Optional-based API - 基于 Optional 的 API
- Transparent wrapping/unwrapping - 透明包装/解包
Usage Examples | 使用示例:
// Create null-safe cache
NullSafeCache<String, User> cache = NullSafeCache.wrap(baseCache);
// Store null value
cache.put("user:deleted", null); // Stores null as sentinel
// Distinguish between miss and null
Optional<User> result = cache.getIfPresent("user:deleted");
if (result == null) {
// Key not in cache
} else if (result.isEmpty()) {
// Key present with null value
} else {
// Key present with actual value
User user = result.get();
}
// Or use containsKey first
if (cache.containsKey("user:deleted")) {
User user = cache.get("user:deleted"); // May return null
}
- Since:
- JDK 25, opencode-base-cache V2.0.4
- Author:
- Leon Soo www.LeonSoo.com
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionasMap()Get a concurrent map view of this cache 获取 ConcurrentMap 视图AsyncCache<K, V> async()Get async view of this cache 获取异步视图voidcleanUp()Perform cleanup (expired entries, etc.)booleancontainsKey(K key) Check if key exists 检查键是否存在booleancontainsNullValue(K key) Check if the key is present with a null value 检查键是否存在且值为 nullentries()Get snapshot of all entries 获取所有条目的快照longGet estimated entry count (fast) 获取估算条目数(快速)Get value by key, returns null if not present 根据键获取值,不存在返回 nullGet value by key, load using loader if not present 根据键获取值,不存在时通过 loader 加载Get all values for given keys, returns only existing entries 批量获取,仅返回存在的条目Get all values, load missing keys using loader 批量获取,缺失的键通过 loader 加载getIfPresent(K key) Get value as Optional, distinguishing null from absent 以 Optional 形式获取值,区分 null 和不存在voidinvalidate(K key) Invalidate a single key 使单个键失效voidInvalidate all entries 清空所有缓存voidinvalidateAll(Iterable<? extends K> keys) Invalidate multiple keys 批量失效keys()Get snapshot of all keys 获取所有键的快照metrics()Get detailed cache metrics with latency percentiles 获取带延迟百分位数的详细缓存指标name()Get cache name 获取缓存名称voidPut a key-value pair into cache 放入键值对voidPut all key-value pairs into cache 批量放入voidputAllWithTtl(Map<? extends K, ? extends V> map, Duration ttl) Put all entries with custom TTL 批量放入并指定自定义 TTLbooleanputIfAbsent(K key, V value) Put if the key is absent, returns true if successful 不存在时放入,成功返回 truebooleanputIfAbsentWithTtl(K key, V value, Duration ttl) Put if absent with custom TTL 不存在时放入并指定自定义 TTLvoidputWithTtl(K key, V value, Duration ttl) Put a key-value pair with custom TTL (overrides default expiration) 放入键值对并指定自定义 TTL(覆盖默认过期时间)longsize()Get exact entry count (may be slow) 获取精确条目数(可能较慢)stats()Get cache statistics 获取缓存统计信息values()Get snapshot of all values 获取所有值的快照static <K,V> NullSafeCache <K, V> Wrap an existing cache with null-safe behavior 用空值安全行为包装现有缓存Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Cache
clear, compute, computeIfAbsent, computeIfPresent, containsValue, entryIterator, entryParallelStream, entryStream, forEach, forEachKey, forEachValue, getAndRemove, getByPattern, getOptional, getOrDefault, getOrNull, invalidateByPattern, invalidateByValue, invalidateIf, isEmpty, keyIterator, keyParallelStream, keyStream, merge, putAllIfAbsent, putIfPresent, removeIfEquals, removeIfPresent, replace, replace, replaceAll, resetStats, updateAll, updateTtl, updateTtl, updateTtlAll, valueParallelStream, valueStream
-
Method Details
-
wrap
Wrap an existing cache with null-safe behavior 用空值安全行为包装现有缓存- Type Parameters:
K- key type | 键类型V- value type | 值类型- Parameters:
cache- the cache to wrap | 要包装的缓存- Returns:
- null-safe cache | 空值安全缓存
-
get
-
get
Description copied from interface:CacheGet value by key, load using loader if not present 根据键获取值,不存在时通过 loader 加载 -
getIfPresent
Get value as Optional, distinguishing null from absent 以 Optional 形式获取值,区分 null 和不存在Returns:
- null - key not present in cache
- Optional.empty() - key present with null value
- Optional.of(value) - key present with non-null value
- Specified by:
getIfPresentin interfaceCache<K,V> - Parameters:
key- the key | 键- Returns:
- Optional containing value, empty Optional for cached null, or null if not present
-
getAll
-
getAll
-
put
-
putAll
-
putIfAbsent
Description copied from interface:CachePut if the key is absent, returns true if successful 不存在时放入,成功返回 true- Specified by:
putIfAbsentin interfaceCache<K,V> - Parameters:
key- the key | 键value- the value | 值- Returns:
- true if put successfully | 成功放入返回 true
-
putWithTtl
Description copied from interface:CachePut a key-value pair with custom TTL (overrides default expiration) 放入键值对并指定自定义 TTL(覆盖默认过期时间)- Specified by:
putWithTtlin interfaceCache<K,V> - Parameters:
key- the key | 键value- the value | 值ttl- the time-to-live for this entry | 此条目的存活时间
-
putAllWithTtl
Description copied from interface:CachePut all entries with custom TTL 批量放入并指定自定义 TTL- Specified by:
putAllWithTtlin interfaceCache<K,V> - Parameters:
map- the key-value pairs | 键值对 Mapttl- the time-to-live for all entries | 所有条目的存活时间
-
putIfAbsentWithTtl
Description copied from interface:CachePut if absent with custom TTL 不存在时放入并指定自定义 TTL- Specified by:
putIfAbsentWithTtlin interfaceCache<K,V> - Parameters:
key- the key | 键value- the value | 值ttl- the time-to-live | 存活时间- Returns:
- true if put successfully | 成功放入返回 true
-
invalidate
-
invalidateAll
-
invalidateAll
public void invalidateAll()Description copied from interface:CacheInvalidate all entries 清空所有缓存- Specified by:
invalidateAllin interfaceCache<K,V>
-
containsKey
-
containsNullValue
Check if the key is present with a null value 检查键是否存在且值为 null- Parameters:
key- the key | 键- Returns:
- true if key is present with null value | 键存在且值为 null 返回 true
-
size
-
estimatedSize
public long estimatedSize()Description copied from interface:CacheGet estimated entry count (fast) 获取估算条目数(快速)- Specified by:
estimatedSizein interfaceCache<K,V> - Returns:
- estimated count | 估算数量
-
keys
-
values
-
entries
-
asMap
-
stats
-
metrics
-
cleanUp
-
async
-
name
-