我有一个"主要"创造许多儿童演员的演员。
子actor执行工作,他们都需要访问我必须从数据库中检索的数据。
我想缓存这些数据,因为每个参与者都要为这些数据访问数据库是非常耗费资源的,并且它不会经常改变(我已经有很好的缓存失效策略)。
例如,我的孩子演员需要:
需要从数据库加载这些对象。
我怎么能加载这些对象,并以某种方式与我所有其他演员分享?
最好的方法是创建一个引用guava缓存的共享类吗?
注意的 我不想要分布式缓存,我认为内存缓存就足够了。
答案 0 :(得分:1)
这里基本上有两种方法:
为每个actor提供对缓存的引用(假设缓存是线程安全的)
创建更多有助于访问缓存的角色。
方法1很简单但会导致actor在发生缓存未命中时阻塞,因此在缓存加载或计算所需值之前无法处理其他消息。
方法2需要更多的演员,但会给你更多的灵活性。但是,如果只添加一个其他actor来访问缓存,则会产生另一个瓶颈。然后,cache-miss将阻止正在访问缓存的所有其他actor。你宁愿为此目的有几个actor,所以你可以a)真正同时访问缓存,b)在缓存未命中时不阻止依赖缓存的特定actor。