接口Cache

半持久化的从key到value的映射。缓存实体是通过get(Object, Callable)或者 put(Object, Object) 方法手工添加,并存储在缓存中,直到被驱逐或者手工失效。

这个接口的实现要求是线程安全(thread-safe),并可以被多个并发线程安全访问。

接口定义

package com.google.common.cache

public interface Cache<K, V> {}

接口方法

getIfPresent()

V getIfPresent(Object key);

返回在这个缓存中和key关联的值,如果这个key不存在缓存值则返回null。

疑问: 为什么key的类型是Object,而不是范型K?

get()

V get(K key, Callable<? extends V> valueLoader) throws ExecutionException;

返回在这个缓存中和key关联的值,必要时从 valueLoader 获取值。不修改和这个缓存关联的可观察的状态直到装载完成。这个方法为 传统的 "如果有缓存则返回;否则先创建再缓存并返回" 提供简单替代。

警告:在 CacheLoader.load()方法中,valueLoader 不容许返回null;它可以返回一个非空值或者抛出异常。

当装载值时,如果抛出受查异常(checked exception)则抛出 ExecutionException; 如果抛出非受查异常则抛出 UncheckedExecutionException 。

getAllPresent()

ImmutableMap<K, V> getAllPresent(Iterable<?> keys);

返回在这个缓存中和key关联的所有值。返回的map将只包含已经存在于缓存的实体。

put()

void put(K key, V value);

关联key和value到缓存中。如果缓存之前已经有value关联到key,旧的值将被替换。

当使用"如果有缓存则返回;否则先创建再缓存并返回"模式时,推荐使用get(Object, Callable)方法。

putAll()

void putAll(Map<? extends K,? extends V> m);;

将指定map中的所有映射复制到缓存中。这个方法调用等同于为指定map中的每个key/value映射调用put(k, v)方法。

当操作进行的过程中,指定的map被修改,这个操作的行为是未定义的(看实现)。

invalidate()

void invalidate(Object key);
void invalidateAll(Iterable<?> keys);
void invalidateAll();

使缓存失效

size()

long size();

返回这个缓存中实体的大概数量

stats()

CacheStats stats();

返回这个缓存累计统计的当前快照。所有状态初始为0,并且在缓存的生存期内单调增长。

asMap()

ConcurrentMap<K, V> asMap();

以线程安全的map的方式返回存储在缓存中的实体的视图。对这个map的修改将直接影响缓存。

cleanUp()

void cleanUp();

执行任何缓存需要的待定维护操作。具体执行哪些行为是依赖实现的。

results matching ""

    No results matching ""