Akka和简单的本地缓存(可能是番石榴)

时间:2013-12-02 21:45:16

标签: scala caching akka guava

我最近开始在Scala中使用Akka,我有一个关于缓存数据的问题(一些昂贵的计算结果)。理想情况下,我想使用像Guava缓存这样的东西来利用自动缓存驱逐和并发写入功能。但是,我不确定将Guava缓存实例与我的actor集成的最佳方法是什么。

我有一组actor通过返回缓存值或计算值,将其存储在缓存中然后返回它来返回计算结果。所有这些actor都应该共享相同的(JVM本地)缓存。可以使用缓存加载器轻松填充缓存。

现在我的问题是:Akka最佳做法是什么?番石榴是个好主意还是有其他Akka友好的图书馆?我如何将缓存注入演员?我应该使用创建它的父级并保留引用,然后在创建子级时将其注入子级中吗?

3 个答案:

答案 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但可以轻松交换另一个缓存实现。