我剛開始閱讀有關ServiceStack的會話和緩存機制,因此我可能會漏掉一些東西。有沒有辦法在ServiceStack中使用多個ICacheClient實現?使用ServiceStack實現多個ICacheClient實現
根據https://github.com/ServiceStack/ServiceStack/wiki/Sessions和https://github.com/ServiceStack/ServiceStack/wiki/Caching你可以添加如下會話插件:
public override void Configure(Container container)
{
Plugins.Add(new SessionFeature());
}
而且你可以註冊一個特定ICacheClient實現像這樣:
container.Register<ICacheClient>(new MemoryCacheClient());
我在想什麼是您可能會遇到需要有狀態服務的情況,這些服務可以保持大量會話狀態以實現最佳性能,但對於更典型的緩存需求,您可能希望使用類似Redis的內容:
container.Register<IRedisClientsManager>(c =>
new PooledRedisClientManager("localhost:6379"));
container.Register<ICacheClient>(c =>
(ICacheClient)c.Resolve<IRedisClientsManager>().GetCacheClient());
但是有沒有辦法在這些之間切換?您是否需要手動創建提供程序(繞過IoC)並將其用於內存或Redis緩存(使用IoC作爲其他ICacheClient實例)?或者圍繞兩個ICacheClient實現創建一個包裝,並使用類似特殊鍵命名模式的內容在內部使用內存與Redis緩存之間進行內部切換?
另外,你將如何處理通過ISession訪問數據?當您直接引用您的自動連線的ICacheClient屬性時,您是否可以使用內存中的ICacheClient支持ISession,同時使用Redis?
神話,被你的編輯弄糊塗了 - 我已經重新修改了答案,試圖更好地解釋我的意思。 – MikeT 2013-03-20 09:39:56
我不知道你爲什麼要編寫不存在的接口?這段代碼不會編譯。 – mythz 2013-03-20 14:51:39
不,它不會編譯,接口需要被定義。我試圖演示如何使用兩個不同的緩存提供程序,以確保ICacheClient被設置爲會話狀態所使用的那個,另一個可以在應用程序中用作會話狀態,同時仍然使用IOC。 – MikeT 2013-03-20 17:08:16