如何在应该缓存的actor之间共享数据

时间:2017-02-20 14:26:01

标签: scala akka

我有一个"主要"创造许多儿童演员的演员。

子actor执行工作,他们都需要访问我必须从数据库中检索的数据。

我想缓存这些数据,因为每个参与者都要为这些数据访问数据库是非常耗费资源的,并且它不会经常改变(我已经有很好的缓存失效策略)。

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

  1. 帐户
  2. 用户
  3. 需要从数据库加载这些对象。

    我怎么能加载这些对象,并以某种方式与我所有其他演员分享?

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

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

1 个答案:

答案 0 :(得分:1)

这里基本上有两种方法:

  1. 为每个actor提供对缓存的引用(假设缓存是线程安全的)

  2. 创建更多有助于访问缓存的角色。

  3. 方法1很简单但会导致actor在发生缓存未命中时阻塞,因此在缓存加载或计算所需值之前无法处理其他消息。

    方法2需要更多的演员,但会给你更多的灵活性。但是,如果只添加一个其他actor来访问缓存,则会产生另一个瓶颈。然后,cache-miss将阻止正在访问缓存的所有其他actor。你宁愿为此目的有几个actor,所以你可以a)真正同时访问缓存,b)在缓存未命中时不阻止依赖缓存的特定actor。