加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

测试 – Guava Ticker Cache过期

发布时间:2020-05-24 10:13:33 所属栏目:Java 来源:互联网
导读:Google Guava教程称缓存过期可以用 Ticker进行测试 根据我的理解,我可以用它来强制快速过期.我对吗? 但我试过以下代码,它没有用,有什么建议吗? @Testpublic void expireAfterWriteTestWithTicker() throws InterruptedException { Ticker t = new Ticker()

Google Guava教程称缓存过期可以用 Ticker进行测试

根据我的理解,我可以用它来强制快速过期.我对吗?

但我试过以下代码,它没有用,有什么建议吗?

@Test
public void expireAfterWriteTestWithTicker() throws InterruptedException {
    Ticker t = new Ticker() {
        @Override
        public long read() {
            return TimeUnit.MILLISECONDS.toNanos(5);
        }
    };
    //Use ticker to force expire in 5 millseconds
    LoadingCache<String,String> cache = CacheBuilder.newBuilder()
            .expireAfterWrite(20,TimeUnit.MINUTES).ticker(t).build(loader);

    cache.getUnchecked("hello");
    assertEquals(1,cache.size());
    assertNotNull(cache.getIfPresent("hello"));
    //sleep
    Thread.sleep(10);
    assertNull(cache.getIfPresent("hello"));    //failed 

}

解决方法

只要自己找到答案

Ticker可用于跳过时间,但不能用于到期时间

class FakeTicker extends Ticker {

    private final AtomicLong nanos = new AtomicLong();

    /** Advances the ticker value by {@code time} in {@code timeUnit}. */
    public FakeTicker advance(long time,TimeUnit timeUnit) {
        nanos.addAndGet(timeUnit.toNanos(time));
        return this;
    }

    @Override
    public long read() {
        long value = nanos.getAndAdd(0);
        System.out.println("is called " + value);
        return value;
    }
}
@Test
public void expireAfterWriteTestWithTicker() throws InterruptedException {
    FakeTicker t = new FakeTicker();

    // Use ticker to force expire in 20 minute
    LoadingCache<String,TimeUnit.MINUTES).ticker(t).build(ldr);
    cache.getUnchecked("hello");
    assertEquals(1,cache.size());
    assertNotNull(cache.getIfPresent("hello"));

    // add 21 minutes
    t.advance(21,TimeUnit.MINUTES);
    assertNull(cache.getIfPresent("hello")); 

}

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读