将数据从字典批量设置为Redis

将数据从字典批量设置为Redis,第1张

将数据从字典批量设置为Redis

“公正”是一个非常相对的术语,没有更多的上下文就没有任何意义,尤其是:这些有效载荷有多大?

但是,请澄清一些要点,以帮助您进行调查:

  • IDatabase
    除非纯粹出于您的目的,否则无需锁定an ;SE.Redis内部处理线程安全,旨在供竞争线程使用
  • 目前,您的时间将包括所有序列化代码(
    JsonConvert.SerializeObject
    );这将加起来, 尤其是 当您的对象很大时;得到一个体面的措施,我强烈建议你的时间序列化和Redis的时间 分别
  • batch.Execute()
    方法使用管道API,并且不等待调用之间的响应,因此:您所看到的时间 不是 延迟的累积影响;只剩下本地CPU(用于序列化),网络带宽和服务器CPU;客户端库工具不会影响任何这些事情
  • 有一个
    StringSet
    接受的重载
    KeyValuePair<RedisKey, RedisValue>[]
    ; 您 可以 选择使用它而不是批处理,但是这里唯一的区别是,它是方尖的
    MSET
    而不是多重的
    SET
    ;无论哪种方式,您都将在此时间内阻止其他调用者的连接(因为批处理的目的是使命令连续)
  • 实际上 不需要在
    CreateBatch
    这里使用, 尤其是 因为您正在锁定数据库(但是我仍然建议您不需要这样做);的目的
    CreateBatch
    是使一系列命令 顺序化 ,但是我看不到您在这里需要这个;您可以只
    _database.StringSetAsync
    依次使用每个命令,这 具有与发送前一条命令 并行 运行序列化的优势-它可以让您重叠序列化(绑定CPU)和redis ops(绑定IO)除删除
    CreateBatch
    呼叫外无任何工作;这也意味着您不会垄断其他呼叫者的连接

所以; 我要做的 第一 件事是 删除 一些代码:

private static StackExchange.Redis.IDatabase _database;static JsonSerializerSettings _redisJsonSettings = new JsonSerializerSettings {    ContractResolver = new SerializeAllContractResolver(),    ReferenceLoopHandling = ReferenceLoopHandling.Ignore };public void SetAll<T>(Dictionary<string, T> data, int cacheTime){    TimeSpan expiration = new TimeSpan(0, cacheTime, 0);    var list = new List<Task<bool>>();    foreach (var item in data)    {        string serializedObject = JsonConvert.SerializeObject( item.Value, Formatting.Indented, _redisJsonSettings);        list.Add(_database.StringSetAsync(item.Key, serializedObject, expiration));    }    Task.WhenAll(list.ToArray());}

我要做的第二件事是将序列化与redis的工作分开计时。

我要做的第三件事是看我是否可以序列化为

MemoryStream
一个我可以重复使用的,理想情况下可以避免重复使用-
避免
string
分配和UTF-8编码:

using(var ms = new MemoryStream()){    foreach (var item in data)    {        ms.Position = 0;        ms.SetLength(0); // erase existing data        JsonConvert.SerializeObject(ms, item.Value, Formatting.Indented, _redisJsonSettings);        list.Add(_database.StringSetAsync(item.Key, ms.ToArray(), expiration));    }}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5015786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存