我正在使用StackExchange Redis DB,通过以下方式使用Batch
插入Key-Value字典:
private static StackExchange.Redis.IDatabase _database;
public void SetAll<T>(Dictionary<string, T> data, int cacheTime)
{
lock (_database)
{
TimeSpan expiration = new TimeSpan(0, cacheTime, 0);
var list = new List<Task<bool>>();
var batch = _database.CreateBatch();
foreach (var item in data)
{
string serializedObject = JsonConvert.SerializeObject(item.Value, Formatting.Indented,
new JsonSerializerSettings { ContractResolver = new SerializeAllContractResolver(), ReferenceLoopHandling = ReferenceLoopHandling.Ignore });
var task = batch.StringSetAsync(item.Key, serializedObject, expiration);
list.Add(task);
serializedObject = null;
}
batch.Execute();
Task.WhenAll(list.ToArray());
}
}
我的问题:设置350个词典项需要耗费7秒。
我的疑问:这是将批量条目设置到Redis的正确方法吗?还是有更快的方法可以实现?任何帮助将不胜感激。谢谢。
long totalChars = 0;
然后在循环中totalChars += item.Key.Length + serializedObject.Length + 25;
,那么最终的totalChars
是多少?显然这不完全等同于字节(UTF-8 是可变长度的),但这将是一种快速简便的了解你正在传输多少数据的方法;+25
是每个命令的传输开销,假设*3\r\n$3\r\nSET\r\n$X\r\n...\r\n$Y\r\n...\r\n
。 - Marc GravelltotalChars
大约是 3639111。 - User3250