我刚开始阅读有关 ServiceStack 的会话和缓存机制的信息,所以我可能会遗漏一些东西。有没有办法在 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 属性时,您能否在使用 Redis 时使用内存中的 ICacheClient 支持 ISession?