管道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