Redis管道Batch操作

管道Batch操作

private async Task AddTTL()
        {
            var db = RDDB.RedisAgent.Database;
            Stopwatch sp = Stopwatch.StartNew();
            var batch1 = db.CreateBatch();
            for (int i = 0; i < 1000000; i++)
            {
                string key = $"ipcounter:{Guid.NewGuid().ToString()}";
                batch1.StringIncrementAsync(key);
                //batch1.KeyExpireAsync(key,TimeSpan.FromMinutes(60));
            }
            batch1.Execute();
            sp.Stop();
            await Console.Out.WriteLineAsync($"batch  set time: {sp.ElapsedMilliseconds}");
            await Console.Out.WriteLineAsync("执行完成");
        }

插入数据100万耗时:

普通添加

private async Task AddTTL2()
        {
            var db = RDDB.RedisAgent.Database;
            Stopwatch sp = Stopwatch.StartNew();
            for (int i = 0; i < 1000000; i++)
            {
                string key = $"ipcounter:{Guid.NewGuid().ToString()}";
                await db.StringIncrementAsync(key);
                //db.KeyExpireAsync(key, TimeSpan.FromMinutes(60));
            }
            sp.Stop();
            await Console.Out.WriteLineAsync($"set time: {sp.ElapsedMilliseconds}");
            await Console.Out.WriteLineAsync("执行完成");
        }

插入1000条耗时:

由此可知,在插入100万条数据,第一种插入方法是第二种方法的1000倍 (同理删除查询也是)

原理:

Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务,大部分耗时时间都是在网络传输这个过程。这意味着通常情况下一个请求会遵循以下步骤:

  • 根据tcp的Request/Response protocol模式

  • 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。

  • 服务端处理命令,并将结果返回给客户端。

使用CreateBatch可以在一次请求中执行多个Redis命令,有效减少了网络传输和请求的开销。

posted @   蛋蛋十二月  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示