簡單的字元串類型數據寫. Poco在redis中會被序列化成Json字元串. Redis以快著稱, 以上寫法不是最快的.因為上邊迴圈中每次都是進行了一個獨立的Redis訪問, 即進行了一次Query, 返回了一個Response 更快的寫法是使用pipeline mode. Pipeline mod ...
簡單的字元串類型數據寫. 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 }