• Guava入门~Guava caches


    Cache 接口

    put(key,value):往缓存中添加值;

    V value = cache.get(key, Callable value):从缓存中获取值;

    1. // 等价
    2. value = cache.get(key);
    3. if(value == null){
    4. value = someService.retrieveValue();
    5. cache.put(key,value);
    6. }

    如果不想执行异步任务,可以使用Callables

    1. Callable<String> value = Callables.returning("Foo");
    2. cache.get(key,Callables.returning(someService.retrieveValue());

    getIfPresent(key):如果存在返回value,否则null;

    丢弃缓存

    invalidate(key)

    invalidateAll()

    invalidateAll(Iterable keys)

    LoadingCache

    Book book = loadingCache.get(id);

    Loading values

    ImmutableMap<key,value> map = cache.getAll(Iterable<? Extends key>);

    Refreshing values in the cache

    refresh(key);

    示例

    1. package bbejeck.guava.chapter6.cache;
    2. import bbejeck.guava.common.model.TradeAccount;
    3. import com.google.common.cache.CacheBuilder;
    4. import com.google.common.cache.CacheLoader;
    5. import com.google.common.cache.LoadingCache;
    6. import org.junit.Test;
    7. import java.util.concurrent.TimeUnit;
    8. import static org.hamcrest.CoreMatchers.is;
    9. import static org.junit.Assert.assertThat;
    10. import static org.mockito.Mockito.*;
    11. /**
    12. * User: Bill Bejeck
    13. * Date: 7/22/13
    14. * Time: 10:53 PM
    15. */
    16. public class LoadingCacheTest {
    17. private CacheLoader<String, TradeAccount> cacheLoader = mock(CacheLoader.class);
    18. @Test
    19. public void testCacheLoaderOnlyCalledOnce() throws Exception {
    20. TradeAccount expectedTradeAccount = new TradeAccount.Builder().balance(250000.12).build();
    21. when(cacheLoader.load("223")).thenReturn(expectedTradeAccount);
    22. LoadingCache<String, TradeAccount> tradeAccountCache = CacheBuilder.newBuilder()
    23. .maximumSize(5000L)
    24. .build(cacheLoader);
    25. TradeAccount tradeAccount = tradeAccountCache.get("223");
    26. assertThat(tradeAccount, is(expectedTradeAccount));
    27. for (int i = 0; i < 10; i++) {
    28. TradeAccount tradeAccount1 = tradeAccountCache.get("223");
    29. assertThat(tradeAccount1, is(expectedTradeAccount));
    30. }
    31. verify(cacheLoader, times(1)).load("223");
    32. }
    33. @Test
    34. public void testCacheLoaderCalledInitiallyAndAfterExpiration() throws Exception {
    35. TradeAccount expectedTradeAccount = new TradeAccount.Builder().balance(250000.12).build();
    36. when(cacheLoader.load("223")).thenReturn(expectedTradeAccount);
    37. LoadingCache<String, TradeAccount> tradeAccountCache = CacheBuilder.newBuilder()
    38. .maximumSize(5000L)
    39. .expireAfterAccess(500l, TimeUnit.MILLISECONDS)
    40. .build(cacheLoader);
    41. TradeAccount tradeAccount = tradeAccountCache.get("223");
    42. assertThat(tradeAccount, is(expectedTradeAccount));
    43. Thread.sleep(1000);
    44. TradeAccount tradeAccount1 = tradeAccountCache.get("223");
    45. assertThat(tradeAccount1, is(expectedTradeAccount));
    46. verify(cacheLoader, times(2)).load("223");
    47. }
    48. }

  • 相关阅读:
    【30. 串联所有单词的子串】
    计算机毕业设计Java校园招聘系统设计(系统+源码+mysql数据库+lw文档)
    ARCGIS PRO SDK 从当前工程中获取相关信息
    maven
    (10)学习笔记:动手深度学习(模型选择 + 过拟合和欠拟合)
    jeecgBoot 一个表格中显示多个字段
    【C++】一篇了解AVL实现细节(易懂图解版)
    201 - Squares (UVA)
    虹科方案|国庆出游季,古建筑振动监测让历史古迹不再受损
    浅谈单例模式
  • 原文地址:https://blog.csdn.net/gqltt/article/details/126469764