Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Akka和简单本地缓存(可能是番石榴)_Scala_Caching_Akka_Guava - Fatal编程技术网

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

Scala Akka和简单本地缓存(可能是番石榴),scala,caching,akka,guava,Scala,Caching,Akka,Guava,我最近开始在Scala中使用Akka,我对缓存数据(一些昂贵计算的结果)有一个疑问。理想情况下,我希望使用番石榴缓存之类的东西来利用自动缓存逐出和并发写入功能。但是,我不确定将番石榴缓存实例与我的参与者集成的最佳方式是什么 我有一组参与者,通过返回缓存值或计算值,将其存储在缓存中,然后返回,来返回计算结果。所有这些参与者都应该共享相同的(JVM本地)缓存。可以使用缓存加载程序轻松填充缓存 现在我的问题是:Akka的最佳实践是什么?番石榴是个好主意还是有其他阿卡友好的图书馆?如何将缓存注入到参与者

我最近开始在Scala中使用Akka,我对缓存数据(一些昂贵计算的结果)有一个疑问。理想情况下,我希望使用番石榴缓存之类的东西来利用自动缓存逐出和并发写入功能。但是,我不确定将番石榴缓存实例与我的参与者集成的最佳方式是什么

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


现在我的问题是:Akka的最佳实践是什么?番石榴是个好主意还是有其他阿卡友好的图书馆?如何将缓存注入到参与者中?我是否应该使用创建它并保留引用的父级,然后在创建子级时将其注入子级?

将是番石榴缓存的更好选择,因为您已经在使用Scala和Akka。这是一个基于Scala Futures的简单内存缓存。

将是Guava缓存的更好替代方案,因为您已经在使用Scala和Akka。这是一个基于Scala Futures的简单内存缓存。

一个想法是使用缓存参与者来代理计算参与者


假设你有一个客户C,他想计算一些很酷的东西。C向CachingActor发送消息。CachingActor有一个Guava cache(或其他东西)的实例,所以它首先检查它的缓存,看看它是否已经有了答案。如果它这样做了,它将返回它,否则它可以要求参与者集计算它,缓存响应并将其返回给C。

一个想法是使用缓存参与者来代理计算参与者


假设你有一个客户C,他想计算一些很酷的东西。C向CachingActor发送消息。CachingActor有一个Guava cache(或其他东西)的实例,所以它首先检查它的缓存,看看它是否已经有了答案。如果它这样做了,它会返回它,否则它会要求参与者组计算它,缓存响应并将其返回到C。

我不确定它是否适合您的用例,但我为Akka的博客写了一篇关于一个基于参与者的缓存系统的文章,该系统用于低速后端。它使用EhCache,但可以很容易地替换为另一个缓存实现。

我不确定它是否适合您的用例,但我为Akka的博客写了一篇文章,介绍了一个用于低速后端的基于参与者的缓存系统。它使用EhCache,但可以很容易地替换为另一个缓存实现。

我仍然不确定如何将缓存与我的参与者集成。如果我使用传统的java并发模型,缓存将被共享,并且可以由多个客户端并发访问。在阿克卡,这是什么意思?我是否在所有需要缓存的参与者中注入相同的缓存实例?那么并发性呢?缓存线程安全吗?spray cache是否支持像Guava cache那样的并发级别?@vptheron的建议将与spray cache一起使用,您可以有一个缓存参与者,因为它将完全无阻塞且快速,然后您可以代理给参与者计算是由不同的参与者还是Akka路由器后面的参与者。我仍然不确定如何将缓存与我的参与者集成。如果我使用传统的java并发模型,缓存将被共享,并且可以由多个客户端并发访问。在阿克卡,这是什么意思?我是否在所有需要缓存的参与者中注入相同的缓存实例?那么并发性呢?缓存线程安全吗?spray cache是否支持像Guava cache那样的并发级别?@vptheron的建议将与spray cache一起使用,您可以有一个缓存参与者,因为它将完全无阻塞且快速,然后您可以代理给参与者无论是多个参与者还是Akka路由器后面的参与者,都要进行计算。因此缓存将在他们需要的多个参与者之间共享?一个参与者将处理缓存,因此您将只有一个缓存实例(因此我猜您可以说它在所有参与者之间共享)。您的参与者集将是缓存参与者的子级,如果其内部缓存不包含特定客户端请求的计算,则缓存参与者将查询这些参与者。因此,缓存将在需要的参与者之间共享?一个参与者将处理缓存,因此您将只有一个缓存实例(所以我想你可以说它是在所有参与者之间共享的)。你的参与者集将是缓存参与者的子级,缓存参与者将在其内部缓存不包含特定客户端请求的计算时查询它们。