Class ReferenceCache<K,V>

java.lang.Object
cloud.opencode.base.cache.ReferenceCache<K,V>
Type Parameters:
K - key type | 键类型
V - value type | 值类型

Features | 主要功能:

  • Weak and soft reference support - 弱引用和软引用支持
  • Automatic GC-based eviction - 基于 GC 的自动淘汰
  • Memory-sensitive caching - 内存敏感缓存
  • Removal listener support - 移除监听器支持

Security | 安全性:

  • Thread-safe: Yes (uses ConcurrentHashMap) - 线程安全: 是(使用 ConcurrentHashMap)
  • Null-safe: Partial (null values not allowed) - 空值安全: 部分(不允许 null 值)
All Implemented Interfaces:
Cache<K,V>

public final class ReferenceCache<K,V> extends Object implements Cache<K,V>
Reference Cache - Memory-sensitive cache using weak/soft references 引用缓存 - 使用弱引用/软引用的内存敏感缓存

Provides a cache that automatically releases entries when memory pressure increases. Supports both weak references (collected on any GC) and soft references (collected only when memory is low).

提供在内存压力增加时自动释放条目的缓存。支持弱引用(任何 GC 时回收)和 软引用(仅在内存不足时回收)。

Reference Types | 引用类型:

  • WEAK - Entries collected on any GC | 任何 GC 时回收条目
  • SOFT - Entries collected when memory is low | 内存不足时回收条目
  • WEAK_KEYS - Only keys use weak references | 仅键使用弱引用
  • SOFT_VALUES - Only values use soft references | 仅值使用软引用

Usage Examples | 使用示例:

// Soft reference cache (memory-sensitive) - 软引用缓存(内存敏感)
Cache<String, byte[]> blobCache = ReferenceCache.<String, byte[]>builder("blobs")
    .referenceType(ReferenceType.SOFT)
    .removalListener((k, v, cause) -> log.info("Evicted: {}", k))
    .build();

// Weak key cache (for canonicalization) - 弱键缓存(用于规范化)
Cache<ClassLoader, Metadata> metaCache = ReferenceCache.<ClassLoader, Metadata>builder("meta")
    .referenceType(ReferenceType.WEAK_KEYS)
    .build();

Performance | 性能特性:

  • Time complexity: O(1) average - 时间复杂度: 平均 O(1)
  • Memory: Adapts to available memory - 内存: 适应可用内存
Since:
JDK 25, opencode-base-cache V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Method Details

    • builder

      public static <K,V> ReferenceCache.Builder<K,V> builder(String name)
      Create builder 创建构建器
      Type Parameters:
      K - key type | 键类型
      V - value type | 值类型
      Parameters:
      name - cache name | 缓存名称
      Returns:
      builder | 构建器
    • get

      public V get(K key)
      Description copied from interface: Cache
      Get value by key, returns null if not present 根据键获取值,不存在返回 null
      Specified by:
      get in interface Cache<K,V>
      Parameters:
      key - the key | 键
      Returns:
      the value or null | 值或 null
    • get

      public V get(K key, Function<? super K, ? extends V> loader)
      Description copied from interface: Cache
      Get value by key, load using loader if not present 根据键获取值,不存在时通过 loader 加载
      Specified by:
      get in interface Cache<K,V>
      Parameters:
      key - the key | 键
      loader - the loader function | 加载函数
      Returns:
      the value | 值
    • getAll

      public Map<K,V> getAll(Iterable<? extends K> keys)
      Description copied from interface: Cache
      Get all values for given keys, returns only existing entries 批量获取,仅返回存在的条目
      Specified by:
      getAll in interface Cache<K,V>
      Parameters:
      keys - the keys | 键集合
      Returns:
      map of existing entries | 存在的条目 Map
    • getAll

      public Map<K,V> getAll(Iterable<? extends K> keys, Function<? super Set<? extends K>, ? extends Map<K,V>> loader)
      Description copied from interface: Cache
      Get all values, load missing keys using loader 批量获取,缺失的键通过 loader 加载
      Specified by:
      getAll in interface Cache<K,V>
      Parameters:
      keys - the keys | 键集合
      loader - the batch loader function | 批量加载函数
      Returns:
      map of all entries | 所有条目 Map
    • put

      public void put(K key, V value)
      Description copied from interface: Cache
      Put a key-value pair into cache 放入键值对
      Specified by:
      put in interface Cache<K,V>
      Parameters:
      key - the key | 键
      value - the value | 值
    • putAll

      public void putAll(Map<? extends K, ? extends V> map)
      Description copied from interface: Cache
      Put all key-value pairs into cache 批量放入
      Specified by:
      putAll in interface Cache<K,V>
      Parameters:
      map - the key-value pairs | 键值对 Map
    • putIfAbsent

      public boolean putIfAbsent(K key, V value)
      Description copied from interface: Cache
      Put if the key is absent, returns true if successful 不存在时放入,成功返回 true
      Specified by:
      putIfAbsent in interface Cache<K,V>
      Parameters:
      key - the key | 键
      value - the value | 值
      Returns:
      true if put successfully | 成功放入返回 true
    • putWithTtl

      public void putWithTtl(K key, V value, Duration ttl)
      Description copied from interface: Cache
      Put a key-value pair with custom TTL (overrides default expiration) 放入键值对并指定自定义 TTL(覆盖默认过期时间)
      Specified by:
      putWithTtl in interface Cache<K,V>
      Parameters:
      key - the key | 键
      value - the value | 值
      ttl - the time-to-live for this entry | 此条目的存活时间
    • putAllWithTtl

      public void putAllWithTtl(Map<? extends K, ? extends V> map, Duration ttl)
      Description copied from interface: Cache
      Put all entries with custom TTL 批量放入并指定自定义 TTL
      Specified by:
      putAllWithTtl in interface Cache<K,V>
      Parameters:
      map - the key-value pairs | 键值对 Map
      ttl - the time-to-live for all entries | 所有条目的存活时间
    • putIfAbsentWithTtl

      public boolean putIfAbsentWithTtl(K key, V value, Duration ttl)
      Description copied from interface: Cache
      Put if absent with custom TTL 不存在时放入并指定自定义 TTL
      Specified by:
      putIfAbsentWithTtl in interface Cache<K,V>
      Parameters:
      key - the key | 键
      value - the value | 值
      ttl - the time-to-live | 存活时间
      Returns:
      true if put successfully | 成功放入返回 true
    • computeIfPresent

      public V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
      Description copied from interface: Cache
      Compute a new value if key is present 如果键存在则计算新值

      If the key is present and the remapping function returns non-null, the value is replaced. If the function returns null, the entry is removed.

      如果键存在且映射函数返回非 null,则替换值。如果函数返回 null,则删除条目。

      Specified by:
      computeIfPresent in interface Cache<K,V>
      Parameters:
      key - the key | 键
      remappingFunction - the function to compute new value | 计算新值的函数
      Returns:
      the new value or null if removed/absent | 新值,如果被删除或不存在则返回 null
    • compute

      public V compute(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)
      Description copied from interface: Cache
      Compute a new value for the key 计算键的新值

      Atomically computes a new value. If the key is absent and the function returns non-null, a new entry is created. If the key is present and the function returns null, the entry is removed.

      原子地计算新值。如果键不存在且函数返回非 null,则创建新条目。 如果键存在且函数返回 null,则删除条目。

      Specified by:
      compute in interface Cache<K,V>
      Parameters:
      key - the key | 键
      remappingFunction - the function to compute value | 计算值的函数
      Returns:
      the new value or null if removed | 新值,如果被删除则返回 null
    • getAndRemove

      public V getAndRemove(K key)
      Description copied from interface: Cache
      Get value and remove the entry atomically 原子地获取值并删除条目
      Specified by:
      getAndRemove in interface Cache<K,V>
      Parameters:
      key - the key | 键
      Returns:
      the value or null if not present | 值,不存在则返回 null
    • replace

      public V replace(K key, V value)
      Description copied from interface: Cache
      Replace value only if key is present 仅在键存在时替换值
      Specified by:
      replace in interface Cache<K,V>
      Parameters:
      key - the key | 键
      value - the new value | 新值
      Returns:
      the old value or null if not present | 旧值,不存在则返回 null
    • replace

      public boolean replace(K key, V oldValue, V newValue)
      Description copied from interface: Cache
      Replace value only if current value equals expected value 仅在当前值等于期望值时替换
      Specified by:
      replace in interface Cache<K,V>
      Parameters:
      key - the key | 键
      oldValue - the expected current value | 期望的当前值
      newValue - the new value | 新值
      Returns:
      true if replaced | 替换成功返回 true
    • invalidate

      public void invalidate(K key)
      Description copied from interface: Cache
      Invalidate a single key 使单个键失效
      Specified by:
      invalidate in interface Cache<K,V>
      Parameters:
      key - the key to invalidate | 要失效的键
    • invalidateAll

      public void invalidateAll(Iterable<? extends K> keys)
      Description copied from interface: Cache
      Invalidate multiple keys 批量失效
      Specified by:
      invalidateAll in interface Cache<K,V>
      Parameters:
      keys - the keys to invalidate | 要失效的键集合
    • invalidateAll

      public void invalidateAll()
      Description copied from interface: Cache
      Invalidate all entries 清空所有缓存
      Specified by:
      invalidateAll in interface Cache<K,V>
    • containsKey

      public boolean containsKey(K key)
      Description copied from interface: Cache
      Check if key exists 检查键是否存在
      Specified by:
      containsKey in interface Cache<K,V>
      Parameters:
      key - the key | 键
      Returns:
      true if exists | 存在返回 true
    • size

      public long size()
      Description copied from interface: Cache
      Get exact entry count (may be slow) 获取精确条目数(可能较慢)
      Specified by:
      size in interface Cache<K,V>
      Returns:
      entry count | 条目数
    • estimatedSize

      public long estimatedSize()
      Description copied from interface: Cache
      Get estimated entry count (fast) 获取估算条目数(快速)
      Specified by:
      estimatedSize in interface Cache<K,V>
      Returns:
      estimated count | 估算数量
    • keys

      public Set<K> keys()
      Description copied from interface: Cache
      Get snapshot of all keys 获取所有键的快照
      Specified by:
      keys in interface Cache<K,V>
      Returns:
      set of keys | 键集合
    • values

      public Collection<V> values()
      Description copied from interface: Cache
      Get snapshot of all values 获取所有值的快照
      Specified by:
      values in interface Cache<K,V>
      Returns:
      collection of values | 值集合
    • entries

      public Set<Map.Entry<K,V>> entries()
      Description copied from interface: Cache
      Get snapshot of all entries 获取所有条目的快照
      Specified by:
      entries in interface Cache<K,V>
      Returns:
      set of entries | 条目集合
    • asMap

      public ConcurrentMap<K,V> asMap()
      Description copied from interface: Cache
      Get a concurrent map view of this cache 获取 ConcurrentMap 视图
      Specified by:
      asMap in interface Cache<K,V>
      Returns:
      concurrent map view | ConcurrentMap 视图
    • stats

      public CacheStats stats()
      Description copied from interface: Cache
      Get cache statistics 获取缓存统计信息
      Specified by:
      stats in interface Cache<K,V>
      Returns:
      cache statistics | 缓存统计
    • cleanUp

      public void cleanUp()
      Description copied from interface: Cache
      Perform cleanup (expired entries, etc.) 执行清理(过期条目等)
      Specified by:
      cleanUp in interface Cache<K,V>
    • async

      public AsyncCache<K,V> async()
      Description copied from interface: Cache
      Get async view of this cache 获取异步视图
      Specified by:
      async in interface Cache<K,V>
      Returns:
      async cache view | 异步缓存视图
    • name

      public String name()
      Description copied from interface: Cache
      Get cache name 获取缓存名称
      Specified by:
      name in interface Cache<K,V>
      Returns:
      cache name | 缓存名称
    • close

      public void close()
      Close the cache and release resources 关闭缓存并释放资源