ServiceStack.Redisデータ操作
5014 ワード
単純な文字列タイプのデータ書き込みPocoはredisでJson文字列にシーケンス化する.
Redisは速いことで有名で、以上の書き方は一番速いわけではありません.上のループでは毎回独立したRedisアクセスが行われているので,すなわちQueryが1回行われ,Responseが返される.
もっと速い書き方はpipeline modeを使うことです.Pipeline modeは前回のQueryの結果を待つことなく、すぐに次のQueryを送信します.Responseが戻るたびに、Responseに対して対応するCallback処理が行われる.
コード実装は次のとおりです.
このコードはServiceStackから抜粋する.Redisのテストクラス
転載先:https://www.cnblogs.com/fudaming/p/5439354.html
1 using (var redis = new RedisClient(connString))
2 {
3 if (redis.Db != 7)
4 ((RedisClient)redis).ChangeDb(7);
5
6 var client = redis.As();
7 var list = new List();
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が1回行われ,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