我在尋找實現本地內存存儲它可以在一個藍色的.NET實例上Azure的實例
我一直在尋找Azure Co-located Caching使用一種簡單的方式實現一個簡單的本地內存緩存它似乎支持我的所有要求:兩個Web角色和輔助角色
工作
實現一個簡單的LRU
保持高速緩存的對象存儲器(RAM)
請允許我來定義緩存大小爲整個機器的總RAM
的百分比保持高速緩存中的網頁/輔助角色的同一臺機器上(共同定位模式)
請允許我在同一臺機器上運行多個應用程序域訪問相同的緩存(Web角色可我處理程序分成不同的AppDomain)
我與Azure Co-located緩存唯一的問題是不同的實例進行通信並嘗試共享緩存 - 而我並不需要所有這些。
我希望每臺機器都有自己獨立的內存中緩存。當我查詢這個緩存時,我不想浪費任何時間向其他實例的緩存發出網絡請求。
Local Cache config?
我已經看到了Azure的緩存配置設置,以使Local Cache - 但它仍然看起來像機器可以相互(即在高速緩存未命中)通信。此配置還需要一個ttlValue
和objectCount
,我希望TTL爲「永久」,並且對象數爲「直到填滿整個緩存」。感覺在兩種情況下都指定maxInt
似乎是錯誤的。
那麼簡單的靜態變量呢?
當我真正想到它時,所有這些Azure緩存對我所需要的東西來說似乎有點矯枉過正。我基本上只需要一個應用程序/角色級別的靜態變量..除了不適用於需求#6(不同的AppDomains)。在這種情況下,要求#4也有點難以實施。
Memcached的
我覺得好老memcached
似乎做正是我想要的。問題是我使用Azure作爲PaaS,而我並不想管理自己的虛擬機。我不認爲我可以在我的角色上安裝memcached
.. [更新]似乎可以在我的角色上本地運行memcached。沒有使用memcached本身,是否有更優雅的「原生」解決方案?
你緩存什麼樣的東西?請記住,只有字符串和一些特殊對象(線程,appdomains)真的在appdomains之間共享,所有其他東西在穿越appdomain邊界時被序列化和反序列化。然後是MarshalByRefObject - 它不完全共享,但來自不同appdomain的調用被封送到其本地appdomain。你可以創建一個MarshalByRef字典,把它放在一個靜態的地方,並在各個appdomains中使用它。 –
@AntonTykhyy我想緩存簡單的JSON對象(一個大約8個字符串的扁平字典,每個字符大約100-200字節)。你可以用你的想法的一個實例來指出我的位置,這聽起來很完美 – talkol
我找不到任何東西。但是,你真的需要這個嗎?角色入口點在與Web角色不同的進程中運行[(1)](http://blogs.msdn.com/b/windowsazure/archive/2010/12/02/new-full-iis-capabilities-differences -from-hosted-web-core.aspx),但是如果你的web角色只有一個站點,它將在一個appdomain中運行。把你的靜態緩存放在Global.asax裏,你應該全部設置好。 –