2017-02-20 45 views
0

我有一个创建许多子actor的“主”actor。如何在应该缓存的actor之间共享数据

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

我想要缓存这些数据,因为每个参与者都需要为此数据点击数据库,而且它不会经常更改(我已经有一个很好的缓存失效策略)。

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

  1. 帐户
  2. 用户

这些对象需要从数据库加载。

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

最好的方法是创建一个引用了番石榴缓存的共享类吗?

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

回答

1

基本上有此两种方法:

  1. 给每个演员缓存的引用(给定的缓存是线程安全的)

  2. 创建便于访问缓存更多的演员。

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

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

+0

对于方法#1,在将工作发送给子actor之前,我总是可以添加缓存的数据,所以它始终存在。 – Blankman

+0

你的意思是当你实例化actor时,你给它一个缓存对象的引用,它包含它将需要的所有数据?所以你的演员永远不会从缓存中请求一些未被缓存的内容?那我想我不会称之为缓存。 – lex82

相关问题