c# - 将 ServiceStack ICacheClient 与 Redis 和 Ninject 结合使用

标签 c# asp.net redis ninject servicestack

我正在使用 servicestack 库中的 ICacheClient 和 Redis 作为后端。

我也在使用 Ninject 进行 DI。

我正在尝试确定在哪个范围内绑定(bind) PooledRedisClient 管理器。

我尝试了以下方法:

Bind<ICacheClient>().ToMethod(ctx => new PooledRedisClientManager(redisURI)).InSingletonScope();

这似乎工作正常,但我经常看到 RedisResponseExceptions

我认为这是因为我的连接用完了。

也许 SingletonScope 不正确?

谁能指出我正确的方向?我正在使用 servicestack 版本:3.9.0

编辑

这是正确的用法吗?

Bind<ICacheClient>().ToMethod(ctx => new PooledRedisClientManager(redisURI).GetCacheClient()).InSingletonScope();

最佳答案

Bind<ICacheClient>().ToMethod(ctx => new PooledRedisClientManager(redisURI).GetCacheClient()).InSingletonScope();

不熟悉 Ninject 语法,但似乎每次 ICacheClient 解析时,上面的内容都可能创建一个新的 PooledRedisClientManager 实例?不确定链中“InSingletonScope”的应用位置。

也许 SingletonScope 不正确?

更新 单例是正确的,并且是获得池化 CacheClient 的好处所必需的。拥有包含 CacheClient 集合(池)的 PooledRedisClientManager 的单个实例将检索现有的 CacheClient,而不是打开新的。您可以通过在构造函数中传入 poolSize 参数来限制池大小(默认值为 10?)。

您还可以使用 BasicRedisClientManager,它不会合并连接并始终打开和处理 CacheClient。

SingletonScope 不正确。我的理解是,如果您将 PooledRedisClientManager 设置为 Singleton,它永远不会处理和关闭它创建的 RedisClients。被处置。由您的 PooledRedisClientManager(通过调用 GetClient())创建的每个 RedisClient 都将延迟 PooledRedisClientManger 来处理它。 PooledRedisClientManager 的实例不想处理它们的 RedisClients,只是将它们作为非事件状态放回“池”中。

关于c# - 将 ServiceStack ICacheClient 与 Redis 和 Ninject 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15138142/

相关文章:

c# - 如何获取和更改 Windows 凭据用户名和密码

c# - gridview 将下拉列表绑定(bind)到 List<keyvaluePair<int, string>>

.net - 手动在ASCII和.NET字符之间转换

c# - 如何在 C# 中的 gridview 中设置页脚中特定列的总计?

c#-4.0 - 如何根据键将数据表存储在redis中

c# - 如何使用 LINQ 过滤和排序从一个集合到另一个集合的行?

c# - Angular 9 组件和 .NET Core 应用程序未作为 SPA 运行

c# - 怎么获取asp :RadioButton with jQuery?的勾选值

node.js - 是否可以看到与 socket.io 捆绑在一起的 redis 模块内部

java - Docker 编写 Redis 和 Spring boot 应用程序 : java.net.ConnectException : Connection refused (Connection refused)",