首页 > 数据库 >Redis管道Batch操作

Redis管道Batch操作

时间:2023-09-14 12:13:57浏览次数:52  
标签:await Console Redis sp db Batch batch1 管道 key

管道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命令,有效减少了网络传输和请求的开销。

标签:await,Console,Redis,sp,db,Batch,batch1,管道,key
From: https://www.cnblogs.com/kkbk/p/17702169.html

相关文章

  • Linux安装redis
    安装环境:第一次首先安装依赖环境:yuminstallgcc-c++1、下载安装redis:wgethttp://download.redis.io/releases/redis-5.0.7.tar.gz2、当前文件夹解压:tar-zxvfredis-5.0.7.tar.gz2-1、进入redis文件夹cdredis-5.0.7,执行make命令进行编译3、指定安装位置安装:makei......
  • 基于Docker的Redis集群配置(1)
    拉取redis镜像dockerpullredis:6.0.8启动6个docker容器,名称与端口不可重复#--cluster-enabledyes#开启redis集群#--nethost#使用宿主机的IP和端口#--appendonlyyes#开启持久化#--nameredis-1 #自定义容器名字dockerrun-d--nameredis-1--networkhost......
  • lua操作redis
    参考:https://blog.csdn.net/weixin_54721305/article/details/125648123实现分布式锁依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId>......
  • JDBC Batch Insert OutOfMemoryError
    Ihavewrittenamethodinsert()inwhichIamtryingtouseJDBCBatchforinsertinghalfamillionrecordsintoaMySQLdatabase:publicvoidinsert(intnameListId,String[]names){Stringsql="INSERTINTOname_list_......
  • 达人探店业务之点赞、排行榜功能(Redis经典场景)
    达人探店业务之点赞、排行榜功能(Redis经典场景)初始代码:@GetMapping("/likes/{id}")publicResultqueryBlogLikes(@PathVariable("id")Longid){//修改点赞数量blogService.update().setSql("liked=liked+1").eq("id",id).update();ret......
  • 学习笔记之Redis消息队列-基于Stream的消息队列
    学习笔记之Redis消息队列-基于Stream的消息队列Stream是Redis5.0引入的一种新数据类型,可以实现一个功能非常完善的消息队列。其实只需要知道写入消息队列的命令和读取消息队列的命令就行了写入消息队列:XADD读取消息队列的方式之一:XREAD在业务开发中,我们可以循环的调用......
  • Redis7 10大数据类型(Redis列表)
    一、常用二、单key多value三、简单说明一个双端链表的结构,容量是2的32次方减1个元素,大概40多亿,主要功能有push/pop等,一般用在栈、队列、消息队列等场景。left、right都可以插入添加;如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。它的底层实......
  • ubuntu redis安装
    1.1更新仓库sudoaptupdate1.2使用apt从官方Ubuntu存储库来安装Redissudoapt-getinstallredis-server二、设置密码2.1打开Redis配置文件redis.confsudovi/etc/redis/redis.conf2.2找到#requirepassfoobared这一行,将注释符号#去掉,将后面修改成自己的密......
  • Redis哨兵模式详解
    目录Redis哨兵模式定义为什么需要Redis哨兵模式?Redis哨兵模式功能Redis哨兵模式原理Redis哨兵模式的优缺点 Redis哨兵模式定义Redis哨兵模式是是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移,是Redis实现高可用的实现方案。 为什么需要Red......
  • 【Azure Batch】在批处理的Task中如何让它执行多个CMD指令呢
    问题描述根据AzureBatch的入门文档(使用Azure门户创建Batch帐户并运行作业: https://docs.azure.cn/zh-cn/batch/quick-create-portal),创建了BatchAccount,Pool,Job,Task.并且成功运行。这时候,想要在Batch的Task中执行多个CMD指令,尝试写多行执行。类似如下:cmd/c"echo......