Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.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 如何在应缓存的参与者之间共享数据_Scala_Akka - Fatal编程技术网

Scala 如何在应缓存的参与者之间共享数据

Scala 如何在应缓存的参与者之间共享数据,scala,akka,Scala,Akka,我有一个“主要”演员,创造了许多儿童演员 子参与者执行工作,他们都需要访问我必须从数据库检索的数据 我想缓存这些数据,因为每个参与者访问数据库获取这些数据会占用大量资源,而且不会经常更改(我已经有了一个很好的缓存失效策略) 例如,“我的孩子”演员需要: 帐目 使用者 等等 这些对象需要从数据库中加载 我如何加载这些对象,并以某种方式与所有其他参与者共享它们 最好的方法是创建一个引用guava缓存的共享类吗 注 我不想要分布式缓存,我认为内存缓存就足够了。这里基本上有两种方法: 为每个参与者提供对

我有一个“主要”演员,创造了许多儿童演员

子参与者执行工作,他们都需要访问我必须从数据库检索的数据

我想缓存这些数据,因为每个参与者访问数据库获取这些数据会占用大量资源,而且不会经常更改(我已经有了一个很好的缓存失效策略)

例如,“我的孩子”演员需要:

  • 帐目
  • 使用者
  • 等等
  • 这些对象需要从数据库中加载

    我如何加载这些对象,并以某种方式与所有其他参与者共享它们

    最好的方法是创建一个引用guava缓存的共享类吗


    我不想要分布式缓存,我认为内存缓存就足够了。

    这里基本上有两种方法:

  • 为每个参与者提供对缓存的引用(假设缓存是线程安全的)

  • 创建更多有助于访问缓存的参与者

  • 方法1很简单,但只要发生缓存未命中,就会导致参与者阻塞,因此在缓存加载或计算所需值之前,它无法处理其他消息


    方法2需要更多的参与者,但给了您更多的灵活性。但是,如果只添加一个其他参与者来访问缓存,则会造成另一个瓶颈。缓存未命中将阻止访问缓存的所有其他参与者。为此,您希望有多个参与者,这样您就可以a)真正同时访问缓存,b)在缓存未命中时不阻止依赖于缓存的特定参与者。

    对于方法1,我可以在将工作发送给子参与者之前添加缓存数据,所以它总是存在的。你的意思是当你实例化actor时,你给它一个缓存对象的引用,该缓存对象包含它需要的所有数据?那么您的参与者永远不会从缓存中请求尚未缓存的内容?我想我不会把它叫做缓存。