Redis中的事务
Batch和Pipelining
Batch会把所需要执行的命令打包成一条请求发到Redis,然后一起等待返回结果。
using (var redis = ConnectionMultiplexer.Connect(redisConnectionStr)) { var db = redis.GetDatabase(); var batch = db.CreateBatch(); Task t1 = batch.StringSetAsync("name", "bob"); Task t2 = batch.StringSetAsync("age", 100); batch.Execute(); Task.WaitAll(t1, t2); }
流水线(Pipelining)可以让我们同时发送多个请求,从而减轻延迟
using (var redis = ConnectionMultiplexer.Connect(redisConnectionStr)) { var db = redis.GetDatabase(); var aPending = db.StringSetAsync("a","a"); var bPending = db.StringSetAsync("b","b"); var a = db.Wait(aPending); var b = db.Wait(bPending); //同样可以用aPending.Wait() 或 Task.WaitAll(aPending, bPending)代替 }