loadingcatch的缓存使用

首先需要引入pom依赖

 

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>24.1-jre</version>

</dependency>

 

生成一个LoadingCache对象

LoadingCache<String, WebSocketSender>websocketCaches = CacheBuilder.newBuilder()

//设置对象在时间没有被写访问则删除

.expireAfterWrite(15,java.util.concurrent.TimeUnit.SECONDS)

      //设置定时刷新      .refreshAfterWrite(60,java.util.concurrent.TimeUnit.SECONDS)

.maximumSize(1000000)// 设置缓存上线

// 移除监听器,缓存对象被删除时执行下面的onRemove方法

          .removalListener(newRemovalListener<String, WebSocketSender>(){

             @Override

             public voidonRemoval(RemovalNotification<String, WebSocketSender> notification) {

                 notification.getValue().close();

             }

          })

// cacheloading 实现自动加载,当调用get方法获取不到时会执行下面的load方法put进缓存  load方法用来获取存取的value

.build(new CacheLoader<String, WebSocketSender>() {

 

             @Override

             public WebSocketSenderload(String key) throws Exception {

                    // 一般是从sql或者nosql数据库获取缓存对象

                 returngenerateWebSocketSender(key);

             }

        });

方法的调用:

asMap所有视图  asMap视图提供了缓存的ConcurrentMap形式

cache.asMap()包含当前所有加载到缓存的项。因此相应地,cache.asMap().keySet()包含当前所有已加载键;

asMap().get(key)实质上等同于cache.getIfPresent(key),而且不会引起缓存项的加载。这和Map的语义约定一致

所有读写操作都会重置相关缓存项的访问时间,包括Cache.asMap().get(Object)方法和Cache.asMap().put(K,V)方法,但不包括Cache.asMap().containsKey(Object)方法,也不包括在Cache.asMap()的集合视图上的操作。比如,遍历Cache.asMap().entrySet()不会重置缓存项的读取时间。

LoadingCache方法的使用 
1)V get(K k):
内部调用getOrLoad(K key)方法,缓存中有对应的值则返回,没有则使用CacheLoader load方法 
getOrLoad(K key)
方法为线程安全方法,内部加锁 
2)V getIfPresent(Object key):
缓存中有对应的值则返回,没有则返回NULL

Long size():缓存对象数量

put(K key,V value): 直接显示地向缓存中插入值,这会直接覆盖掉已有键之前映射的值。

invalidate(Object key):显式地清除指定key的缓存对象

invalidateAll(): 清除所有缓存对象

 

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值