`
xpchenfrank
  • 浏览: 31154 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

Guava Cache 数据的移除

阅读更多

这篇文章主要介绍下用guava做cache时候数据的移除方式,在guava中数据的移除分为被动移除和主动移除两种

 

 

被动移除数据的方式,guava默认提供了三种方式:

 

 

基于大小的移除

 

 

      看字面意思就知道就是按照缓存的大小来移除,如果即将到达指定的大小,那就会把不常用的键值对从cache中移除。

 

      定义的方式一般为 CacheBuilder.maximumSize(long),官方还介绍了一种可以算权重的方法,个人认为实际使用中不太用到,暂不讨论。

 

              就这个常用的来看有几个注意点,

其一,这个size指的是cache中的条目数,不是内存大小或是其他;

其二,并不是完全到了指定的size系统才开始移除不常用的数据的,而是接近这个size的时候系统就会开始做移除的动作;

其三,如果一个键值对已经从缓存中被移除了,你再次请求访问的时候,如果cachebuild是使用cacheloader方式的,那依然还是会从cacheloader中再取一次值,如果这样还没有,就会抛出异常

 

 

        基于时间的移除

 

      guava提供了两个基于时间移除的方法

      expireAfterAccess(long, TimeUnit)  这个方法是根据某个键值对最后一次访问之后多少时间后移除

      expireAfterWrite(long, TimeUnit)    这个方法是根据某个键值对被创建或值被替换后多少时间移除

 

        基于引用的移除

 

      这种移除方式主要是基于java的垃圾回收机制,根据键或者值的引用关系决定移除,个人对垃圾回收这块不是非常了解,窃以为不太可靠。。也不常用。。所以没有研究,欢迎补充。

 

 

主动移除数据方式

 

       主动移除有三种方法:

 

             单独移除用 Cache.invalidate(key)

     批量移除用 Cache.invalidateAll(keys)

             移除所有用 Cache.invalidateAll()

 

       如果需要在移除数据的时候有所动作还可以定义Removal Listener,但是有点需要注意的是默认Removal Listener中的行为是和移除动作同步执行的,如果需要改成异步形式,可以考虑使用RemovalListeners.asynchronous(RemovalListener, Executor)

 

 

0
1
分享到:
评论

相关推荐

    Guava-Cache本地缓存案例代码

    Guava Cache是Google Guava库中的一个强大特性,它提供了高效的本地缓存解决方案,用于存储经常访问的数据,以减少对远程服务或计算的调用,从而提高应用性能。本案例代码将详细介绍Guava Cache的使用,包括缓存的...

    guava-cache.rar

    Guava Cache是Google Guava库中的一个强大特性,它提供了高效的本地缓存解决方案。在许多应用程序中,我们经常需要缓存数据以减少不必要的数据库查询或远程服务调用,提高系统性能。尽管分布式缓存如Redis在高并发和...

    Go-Localcaching-GuavaCache在Go中的部分的实现

    4. **监听器**:Guava Cache提供了丰富的事件监听机制,如插入、更新、移除等操作的监听。Go实现可能会有对应的事件接口,允许用户注册回调函数,以应对缓存的变化。 5. **并发控制**:Guava Cache保证了线程安全,...

    第七章 企业项目开发--本地缓存guava cache1

    Guava Cache提供了get()方法来获取缓存中的数据,如果缓存中没有,则调用load()方法加载数据并放入缓存。 ```java try { return graphs.get(key); } catch (ExecutionException e) { throw new OtherException(e....

    Guava-CacheDemo.rar

    Guava Cache的设计目标是为了帮助应用程序在内存中存储经常访问的数据,以减少对远程服务或者数据库的调用,从而提高性能和响应速度。 **一、Guava Cache的基本概念** 1. **LoadingCache**: Guava Cache的核心接口...

    使用google guava 实现定时缓存功能

    创建一个Guava Cache对象,你可以通过`LoadingCache`接口,它在缓存项缺失时会自动加载。例如: ```java LoadingCache, Graph> graphs = CacheBuilder.newBuilder() .maximumSize(1000) // 设置最大缓存容量 ....

    Guava-Cache-Demo:演示如何使用 Guava 缓存

    Guava Cache 提供了一种键值对存储,其中的值可以自动过期或基于一定的填充策略被移除。它支持同步和异步加载值,提供了统计信息以及弱引用和软引用的键值对存储选项,从而在内存管理上提供了灵活性。 在 `Guava-...

    Java内存缓存工具Guava LoadingCache使用解析

    Guava Cache是单个应用运行时的本地缓存,用于将数据缓存到JVM内存中,提高应用程序的性能和效率。本文将详细介绍Guava LoadingCache的使用解析,包括其优点、缺点、使用场景、配置参数等方面。 Guava LoadingCache...

    如何基于LoadingCache实现Java本地缓存

    Guava cache 模块提供了许多有用的特性,如自动加载、缓存池大小限制、缓存项过期时间设置、缓存项移除监听器等。 二、LoadingCache 简介 LoadingCache 是 Guava 库提供的一种缓存实现方式,继承自 Cache 接口。...

    最新guava17.0jar,17.0API与guava16.0jar,16.0API

    - **Cache模块**:Guava的Cache模块在17.0中可能有性能提升和更灵活的配置选项。 - **Multiset和Table的改进**:这两个数据结构在新版本中可能提供更丰富的操作和优化。 - **检查异常(CheckedException)**:对于...

    Google的guava实战

    Guava Cache为开发者提供了丰富的配置选项,包括自动移除策略、缓存大小限制等,可以帮助开发者优化内存使用和提高应用程序性能。 在并发编程方面,Guava提供了丰富的并发工具,如ListenableFuture、LoadingCache、...

    开源项目-goburrow-cache.zip

    开源项目-goburrow-cache.zip 是一个基于Go语言实现的本地缓存库,它受到了Google的Guava Cache的启发,旨在为Go开发者提供类似于Guava Cache的功能。Guava Cache是Java开发中的一个流行缓存解决方案,而goburrow-...

    guava23.0,用于安卓软件开发

    2. **缓存机制**:Guava的Cache模块允许开发者创建本地缓存,以提高应用程序的性能。它可以自动管理缓存大小,支持基于时间和引用的过期策略,甚至可以监听缓存项的添加和移除事件。 3. **并发工具**:Guava提供了...

    guava-19.0

    - Guava的Immutable集合类是不可变的,适合用于创建线程安全的常量数据结构,这个版本可能对它们的创建效率进行了提升。 2. **并发库**: - Guava的并发库提供了一些高级并发工具,如ListenableFuture、Futures、...

    guava中文文档,PDF+word双版本

    2. **缓存机制**:Guava的Cache模块允许开发者创建高效的本地缓存,它可以自动管理缓存的大小,根据预设策略进行过期和移除,从而提高性能。 3. **并发工具**:Guava提供了线程安全的数据结构和并发工具,如Striped...

    guava相关资源

    3. **缓存机制**:Guava提供了一种强大的本地缓存机制,可以根据需要自动加载或移除数据,提高了程序性能。 4. **字符串处理**:Guava的Strings类提供了各种实用的静态方法,如split、join、strip等,方便字符串...

    Cache的简单实现(java版)

    在实际项目中,还可以考虑使用第三方库如Google的Guava库,它提供了高效且功能丰富的Cache实现,支持LRU和其他高级特性。然而,了解基本实现原理对于优化和定制自己的缓存解决方案至关重要。 总结,通过Java实现...

    java实现cache小实例

    3. **数据过期**:缓存中的数据可能会过期,因此需要一个机制来检查并移除过期的数据。这可以通过设置每个条目的时间戳或访问计数器来实现。 4. **线程安全**:在多线程环境中,我们需要确保缓存操作是线程安全的,...

    cache java

    2. **Guava Cache**: Google Guava库的一部分,提供了一个简单易用且功能强大的本地缓存实现。 3. **Hazelcast**: 一个分布式内存数据网格,不仅提供缓存功能,还能实现分布式计算和存储。 4. **Infinispan**: 一个...

    使用缓冲.

    例如,我们可以创建一个Guava Cache实例,然后使用`LoadingCache`接口,当尝试获取一个不存在于缓存中的键时,它会自动调用预定义的加载函数从数据源中填充数据。 ```java LoadingCache, Graph> graphs = ...

Global site tag (gtag.js) - Google Analytics