Guava 缓存读后总结

目录

 

零、说明

一、初始化

二、缓存回收机制

四、其他说明

Cache API(偷懒一下)


零、说明

Guava - cache是​​一个本地缓存,读了一些源码和文档在此总结一下。

先来个上手例子(学习官网套路)

LoadingCache<Key, Object> loadingCache = CacheBuilder.newBuilder()
                                              .maximumSize(1000) //缓存最大个数
                                              .expireAfterWrite(10, TimeUnit.MINUTES) //缓存淘汰-写入10分钟后淘汰
                                              .removalListener(MY_LISTENER)//缓存移除监听
                                              .build(
                                                  new CacheLoader<Key, Objext>() {
                                                     public Object load(Key key) throws AnyException {
                                                         return createObject(key);//加载方法
                                                     }
                                                  });

一、初始化

        1.初始化方法

            LoadingCache = CacheBuilder.newBuilder().build(CacheLoader cacheLoader);

        2.参数设置

            CacheBuilder.newBuilder().设置参数

        3.参数列表及解释(都为CacheBuilder的参数)

参数

类型 说明

maximumSize

long

缓存对象个数

maximumWeight

long

权重大小

weigher

Weigher<? super K, ? super V>

权重算法

expireAfterWrite

long

写入后有效时长

expireAfterAccess

long

使用后有效时长

ticker

Ticker

时间源

removalListener

RemovalListener<? super K, ? super V>

移除监听

二、缓存回收机制

  1. 定时回收
    • 根据expireAfterWrite做写入后的超时回收
    • 根据expireAfterAccess做最后一次使用后超时回
  2. 权重回收
    • 设置maximumWeight最大权重
    • 设置权重算法weigher
  3. Reference-based
    • 根据弱引用以及软引用进行回收

三、LoadingCache API

方法 参数 返回值 说明

V get(K key) throws ExecutionException

key:缓存键 缓存对象 从缓存中获取key对应的对象,若缓存没有则从load中获取并加载到缓存中

V getUnchecked(K key)

key:缓存键 缓存对象 从缓存中获取key对应的对象,若缓存没有则从load中获取并加载到缓存中

ImmutableMap<K, V> getAll(Iterable<? extends K> keys

) throws ExecutionException

keys:缓存键列表迭代器 缓存对象map 从缓存中获取keys对应的对象,若缓存没有则从load中获取并加载到缓存中

void refresh(K var1)

key:缓存键 从load中刷新key对应的值到本地缓存

ConcurrentMap<K, V> asMap()

  缓存map对象 获取缓存内容map

四、其他说明

        LoadingCache 继承了 Cache,可直接构建Cache,封装Cache对象,实现本地缓存

        示例:

Cache cache = CacheBuilder.newBuilder()
                          .maximumSize(1000) //缓存最大个数
                          .expireAfterWrite(10, TimeUnit.MINUTES) //缓存淘汰-写入10分钟后淘汰
                          .removalListener(MY_LISTENER)//缓存移除监听
                          .build();

Cache本身有很多API,可以封装形成自己实用的LocalCache

Cache API(偷懒一下)

<strong>@Nullable
V getIfPresent(Object var1);

V get(K var1, Callable<? extends V> var2) throws ExecutionException;

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

void put(K var1, V var2);

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

void invalidate(Object var1);

void invalidateAll(Iterable<?> var1);

void invalidateAll();

long size();

CacheStats stats();

ConcurrentMap<K, V> asMap();

void cleanUp();</strong>

猜你喜欢

转载自blog.csdn.net/laoxilaoxi_/article/details/80759347