缓存解决了各种各样的性能问题。 有很多方法可以将缓存集成到我们的应用程序中。 例如,当我们使用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