【StackExchange.Redis笔记】批处理、事务

批处理

StackExchange.Redis中对于连续多次的缓存等请求,我们会多次调用相关的函数来执行Redis命令。然而这种方式有个弊端就是每一次的请求都需要等待返回结果,如果在网络状况不好的情况下,可能会造成不好的用户体验。
StackExchange.Redis里面没有找到pipe指令,后来发现该指令的实现是:通过CreateBatch方法实现的。
batch会把所需要执行的命令打包成一条请求发到Redis,然后一起等待返回结果。这样批量操作的速度就大大提升啦!

public void TestPipeLine()
        {
            IDatabase db = StackExchangeRedisHelper.GetDatabase();
            var batch = db.CreateBatch();
            Task t1 = batch.StringSetAsync("name", "bob");
            Task t2 = batch.StringSetAsync("age", 100);
            batch.Execute();
            Task.WaitAll(t1, t2);
            Console.WriteLine("Age:" + db.StringGet("age"));
            Console.WriteLine("Name:" + db.StringGet("name"));
        }

StackExchange.Redis中的事物控制

但是StackExchange.Redis提供了一套非常简单易懂的创建事物的方式 ,下面为示例代码

 public static void Main(string[] args)
        {
            ConnectionMultiplexer redis = ConnectionMultiplexer.Connect("xxxxxxx:6379,password=123456");
            IDatabase db = redis.GetDatabase(2);
            string name = db.StringGet("name");
            var tran = db.CreateTransaction();
            tran.AddCondition(Condition.StringEqual("name", name));
            tran.StringSetAsync("name", "fan");
            tran.StringSetAsync("age",18);
            bool result = tran.Execute();
            Console.ReadKey();
        }

这里通过CreateTransaction函数(multi)来创建一个事物,调用其Execute函数(exec)提交事物,其中的 "Condition.StringEqual("name", name)" 就相当于Redis命令中的watch name。

posted @   .Neterr  阅读(371)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示