我从 StackExchange.Redis 文档中收到有关如何使用 IDatabase 的混合消息。在里面基本使用文档 https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/Basics.md#using-a-redis-database它说:
从 GetDatabase 返回的对象是一个廉价的传递对象,不需要存储。
这给人的印象是我应该为每个 Redis 操作调用 GetDatabase。
然而,从流水线和多路复用文档 https://github.com/StackExchange/StackExchange.Redis/blob/master/Docs/PipelinesMultiplexers.md,通过语言和示例代码,似乎您应该重新使用 IDatabase 对象来利用管道和多路复用。我说看起来是这样,因为示例代码块重复使用相同的数据库,并且因为它讨论了重新使用联系。现在,我不确定是否联系指的是 GetDatabase 返回的对象,或者底层连接,或者什么。
我正在从 asp.net Web 应用程序访问 Redis,因此我需要优化代码以实现高度多线程访问。我应该对每个操作调用 GetDatabase,还是应该由多个线程共享 IDatabase 对象?如果是后者,程度如何?一个数据库对象是否应该在整个应用程序中无限期地共享?
Use the ConnectionMultiplexer
跨多个线程。我在用着.NET Core 依赖注入 https://stackoverflow.com/questions/40844665但你可以使用
static readonly Lazy<ConnectionMultiplexer> SharedMultiplexer =>
new Lazy<ConnectionMultiplexer>(() => ConnectionMultiplexer.Connect("localhost"));
Call GetDatabase()
就在您在特定请求中需要它之前。
使用内联async
and await
异步操作中的延续方法,以确保您针对高度并发访问进行优化...
string value = await SharedMultiplexer.GetDatabase().StringGetAsync("mykey");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)