ServiceStack.Redis 数据操作

简单的字符串类型数据写. Poco在redis中会被序列化成Json字符串.

 

 1    using (var redis = new RedisClient(connString))
 2     {
 3       if (redis.Db != 7)
 4          ((RedisClient)redis).ChangeDb(7);
 5  
 6       var client = redis.As<Poco>();
 7        var list = new List<Poco>();
 8         
 9        foreach(var key in keys)
10        {
11            list.Add(client.GetValue(key.ToString(CultureInfo.InvariantCulture)));
12        }
13 
14       return list;
15     }

 

 

Redis以快著称, 以上写法不是最快的.因为上边循环中每次都是进行了一个独立的Redis访问, 即进行了一次Query, 返回了一个Response

[req1]
     [====waiting=====]
                      [resp1]
                            [req2]
                                 [====waiting=====]
                                                  [resp2]

 

更快的写法是使用pipeline mode. Pipeline mode不会等待上一次Query的结果, 会立刻发送下一个Query. 每当有一条Response返回时, 它会对Response进行对应的Callback处理.

 

以下是代码实现:

此段代码摘自ServiceStack.Redis的测试类

 1     [Test]
 2     public void Can_call_single_operation_with_callback_3_Times_in_pipeline()
 3     {
 4         var results = new List<long>();
 5         Assert.That(Redis.GetValue(Key), Is.Null);
 6         using (var pipeline = Redis.CreatePipeline())
 7         {
 8             pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
 9             pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
10             pipeline.QueueCommand(r => r.IncrementValue(Key), results.Add);
11             pipeline.Flush();
12         }
13 
14         Assert.That(Redis.GetValue(Key), Is.EqualTo("3"));
15         Assert.That(results, Is.EquivalentTo(new List<long> { 1, 2, 3 }));
16     }

 

转载于:https://www.cnblogs.com/fudaming/p/5439354.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值