3
A
回答
5
,能夠使用下一個方法
Task<RedisValue[]> StringGetAsync(RedisKey[] keys, CommandFlags flags = CommandFlags.None);
在StackExchange的DLL。 給出一個鍵數組並接收一個Redis值數組。
1
您可以使用StringGetAsync,但如果密鑰數量過多,可能導致您重載服務器。您可以使用該功能從下面將由50000個鍵獲取所有分頁鍵每頁
public async Task<Dictionary<string, T>> GetManyAsync<T>(ICollection<string> ids, int dbIndex)
{
var semaphore = new SemaphoreSlim(1);
var rs = await ids.ToRedisKeys()
.ToObservable()
.Buffer(50000)
.SelectMany(async keysPage =>
{
try
{
await semaphore.WaitAsync();
var redisValues = await DoRead(_ => _.StringGetAsync(keysPage.ToArray()), dbIndex);
return redisValues.Select(_ => serializer.Deserialize<T>(_));
}
finally
{
semaphore.Release();
}
}).SelectMany(_ => _).ToList();
return ids.Zip(rs, (i, r) => new { i, r }).ToDictionary(_ => _.i, _ => _.r);
}
測試此功能:
[Fact]
public async Task test_redis_paging()
{
var source = Observable.Range(1, 5);
var kvp = await source.Buffer(3).SelectMany(async ls =>
{
string msg = $"item: {ls.First()}; thread {Thread.CurrentThread.ManagedThreadId}";
Console.Out.WriteLine(DateTime.Now.TimeOfDay + msg + " started:");
await Task.Delay(1000);
Console.Out.WriteLine(DateTime.Now.TimeOfDay + msg + " finished:");
return ls;
}).SelectMany(_=>_).ToList();
(kvp.Count()).Should().Be(5);
}
相關問題
- 1. Redis Mget vs獲得
- 2. 如何在redis中一次獲得多個密鑰的值?
- 3. 使用redis獲取一系列密鑰?
- 4. 獲得popen與mkvtoolnix一起工作?
- 5. 獲得Magnific Popup與RequireJS一起工作
- 6. 使用Stackexchange,負載下的MGET調用變得越來越慢。Redis
- 7. 不能得到socket.io發射器與socket.io-redis一起工作
- 8. Redis從set中獲取密鑰,然後獲得多個數據
- 9. 主題音樂 - 試圖獲得持續時間和密鑰一起工作
- 10. 使用node-redis獲取多個密鑰
- 11. REDIS - 獲取多個密鑰的值
- 12. 如何將NSCache與多個信息一起用作「密鑰」?
- 13. Redis ZCARD多個密鑰(redis-rb)
- 14. Redis MGET侷限性
- 15. MapReduce wordcount獲得唯一密鑰
- 16. PHP MySQL,獲得下一個密鑰
- 17. 使用pdftk一次解密許多PDF
- 18. 密碼加密與phpbb3密碼一起工作
- 19. 與Tastypie一起使用REDIS
- 20. Eclipse與多個項目一起工作
- 21. JMeter - 與多個測試一起工作
- 22. 獲取requirejs與Jasmine一起工作
- 23. 獲取數組與Toupper一起工作
- 24. 獲取log4j2與eclipse一起工作
- 25. 獲取Uploadify與asp.net-mvc一起工作
- 26. 獲取django-paypal與pycrypto一起工作?
- 27. 獲取JBoss Seam與Eclipse一起工作
- 28. 獲取Spring MVC與JodaModule一起工作
- 29. 獲取$ _GET與Codeigniter一起工作
- 30. Redis:是否可以通過密鑰獲取Set的一個值?