需要微缓存吗? 营救记忆

缓存解决了各种各样的性能问题。 有很多方法可以将缓存集成到我们的应用程序中。 例如,当我们使用Spring时,可以轻松使用@Cacheable支持。 非常简单,但我们仍然必须配置缓存管理器,缓存区域等。有时,就像用大锤砸破坚果一样。 那么我们该怎么做才能“打火机”呢?

有一种称为记忆的技术。 从技术上讲,它就像馅饼一样容易,但真正的天才在于简单。 模型解决方案如下所示:

public Foo getValue() {
  if (storedValue == null) {
    storedValue = retrieveFoo();
  }
  return storedValue;
}

如您所见,手动实现它没有问题,但是只要我们记得DRY规则,我们就可以使用已经实现的解决方案,该解决方案还提供了线程安全性。 很好的主意是使用Guava库。

// create
Supplier<Foo> memoizer = Suppliers.memoize(this::retrieveFoo);

// and use
Foo variable = memoizer.get();

有时就足够了,但是如果我们需要为值指定TTL怎么办? 我们只需要存储(缓存)取回的值几秒钟,并且在超过定义的持续时间后再获得一次该值? 我们可以再使用一次Guava提供的功能。

Supplier<Foo> memoizer = Suppliers.memoizeWithExpiration(this::retrieveFoo, 
    5, TimeUnit.SECONDS);

上一行建立了TTL = 5秒的备忘录。 如您所见-简单……但功能强大!

翻译自: https://www.javacodegeeks.com/2014/11/need-micro-caching-memoization-to-the-rescue.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值