我最近开始在Scala中使用Akka,我有一个关于缓存数据的问题(一些昂贵的计算结果)。理想情况下,我想使用像Guava缓存这样的东西来利用自动缓存驱逐和并发写入功能。但是,我不确定将Guava缓存实例与我的actor集成的最佳方法是什么。
我有一组actor通过返回缓存值或计算值,将其存储在缓存中然后返回它来返回计算结果。所有这些actor都应该共享相同的(JVM本地)缓存。可以使用缓存加载器轻松填充缓存。
现在我的问题是:Akka最佳做法是什么?番石榴是个好主意还是有其他Akka友好的图书馆?我如何将缓存注入演员?我应该使用创建它的父级并保留引用,然后在创建子级时将其注入子级中吗?
答案 0 :(得分:3)
Spray Caching将是Guava缓存的更好替代品,因为您已经在使用Scala和Akka。它是基于Scala Futures的简单内存缓存。
答案 1 :(得分:2)
一个想法是使用缓存actor代理计算参与者。
假设您有一个想要计算酷事的客户C. C向CachingActor发送消息。 CachingActor有一个Guava缓存实例(或其他东西),所以它首先检查它的缓存,看看它是否已经有了答案。如果是,则返回它,否则它可以要求演员集计算它,缓存响应并将其返回给C.
答案 2 :(得分:0)
我不确定它是否适合您的用例但是我为Akka的guest post博客写了一篇Let it Crash关于基于actor的缓存系统的缓慢后端。它使用EhCache但可以轻松交换另一个缓存实现。