zoukankan      html  css  js  c++  java
  • StackExchange.Redis笔记-事务、乐观锁、批处理

    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。

    Batch批量操作

    StackExchange.Redis中对于连续多次的缓存等请求,我们会多次调用相关的函数来执行Redis命令。然而这种方式有个弊端就是每一次的请求都需要等待返回结果
    如果在网络状况不好的情况下,可能会造成不好的用户体验。
    对于这种问题可以用StackExchange.Redis提供的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"));
            }
    
  • 相关阅读:
    数据结构与算法部分习题题解
    Codeforces Round #372 +#373 部分题解
    KMP算法的正确性证明及一个小优化
    后记
    BZOJ 4089:[Sdoi2015]graft(SDOI 2015 Round 2 Day 2)
    BZOJ 4085:[Sdoi2015]bigyration(SDOI 2015 round 2 Day 1)
    使用 async await 封装微信小程序HTTP请求
    mongo创建数据库和用户
    把实体bean对象转换成DBObject工具类
    Trident整合MongoDB
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/13236151.html
Copyright © 2011-2022 走看看