我刚开始阅读有关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