2017-02-20 93 views
0

我有一個創建許多子actor的「主」actor。如何在應該緩存的actor之間共享數據

孩子演員執行工作,他們都需要訪問我必須從數據庫中檢索的數據。

我想要緩存這些數據,因爲每個參與者都需要爲此數據點擊數據庫,而且它不會經常更改(我已經有一個很好的緩存失效策略)。

例如,我的孩子演員將需要:

  1. 帳戶
  2. 用戶

這些對象需要從數據庫加載。

我怎麼能加載這些對象,並以某種方式與我所有其他演員共享它們?

最好的方法是創建一個引用了番石榴緩存的共享類嗎?

注意 我不想分佈式緩存,我認爲內存緩存就足夠了。

回答

1

基本上有此兩種方法:

  1. 給每個演員緩存的引用(給定的緩存是線程安全的)

  2. 創建便於訪問緩存更多的演員。

方法1很簡單,但會導致actor在發生cache-miss時發生阻塞,因此無法在緩存加載或計算所需值之前處理其他消息。

方法2需要更多的演員,但給你更多的靈活性。但是,如果您只添加一個其他角色來訪問緩存,則會造成另一個瓶頸。然後緩存未命中將阻止所有正在訪問緩存的其他角色。爲此,您寧願有幾個角色,以便您可以a)真正地同時訪問緩存,b)在發生緩存未命中時,不阻止依賴緩存的特定角色。

+0

對於方法#1,在將工作發送給子actor之前,我總是可以添加緩存的數據,所以它始終存在。 – Blankman

+0

你的意思是當你實例化actor時,你給它一個緩存對象的引用,它包含它將需要的所有數據?所以你的演員永遠不會從緩存中請求一些未被緩存的內容?那我想我不會稱之爲緩存。 – lex82