我是redis的新手,所以我做错了,我敢肯定:
我在Azure Redis中存储了大约16,000个键/值.
我使用以下代码来写入键/值
foreach (var worksheet in wksList)
{
var wksYYMM = string.Format("{0}{1:00}", worksheet.ReviewDt.Year, worksheet.ReviewDt.Month);
var wksKey = string.Format("{0}:{1}:{2}", provCode, wksYYMM, worksheet.AcctNbr);
string jsonStr = JsonConvert.SerializeObject( MakeWsListDto(worksheet, provCoderList, rvrList));
cache.StringSet(wksKey, jsonStr);
}
Run Code Online (Sandbox Code Playgroud)
所以我的键看起来像这样:"AP:201401:AZ5798BK"
当我尝试查找时:
var keys = server.Keys(pattern: "AP:201401:*"); // returns in milliseconds
var keyAry = keys.ToArray(); // returns in over one minute
(note: this returns 12 keys)
Run Code Online (Sandbox Code Playgroud)
返回键需要1分12秒.一旦我有了密钥,它需要几毫秒来检索那些值.如果我迭代键的值并返回值,我得到类似的结果.我做了ToArray()只是为了隔离问题.
如果我在redis-cli.exe中尝试相同的查询,它会在几毫秒内回来.
我错误地使用此命令了吗?
我正在使用StackExchange.Redis从 .NET Core 连接到 Redis 服务器。如何将单例注入IConnectionMultiplexer另一个单例服务?
启动文件
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSingleton<IConnectionMultiplexer>(ConnectionMultiplexer.Connect(GetRedisConnectionString()));
services.AddSingleton<IMyService>(new MyService(new DbContext(optionsBuilder.Options)), ???);
...
}
Run Code Online (Sandbox Code Playgroud)
我的服务.cs
private DbContext _dbContext;
private IConnectionMultiplexer _redis;
public MyService(DbContext dbContext, IConnectionMultiplexer redis)
{
_dbContext = fitDBContext;
_redis = redis;
}
Run Code Online (Sandbox Code Playgroud)
我需要放什么而不是放进???去ConfigureServices?还有其他方法吗?
StackExchange.Redis建议(链接)我们保存ConnectionMultiplexer.Connect(...)调用的返回值并重用它。因此,我为它创建了单例服务(它基于另一个StackOverFlow 问题)可以注入,但我没有任何运气将它注入另一个 SINGLETON 服务MyService。
c# dependency-injection redis stackexchange.redis asp.net-core