Redisチュートリアル-Pipeline
1862 ワード
Pipelineコンセプト
Redisクライアントが実行するコマンドは、次の4つのプロセスに分けられます.
このうち、1〜4をRound Trip Time(RTT、往復時間)と呼ぶ.
Redisは、mset、mgetなどの一括操作コマンドを提供し、RTTを効率的に節約します.しかし、ほとんどのコマンドは一括操作をサポートしていません.例えば、hgetallコマンドをn回実行するには、mhgetallコマンドが存在せず、RTTをn回消費する必要があります.Redisのクライアントとサービス側は、異なるマシンに配備される可能性があります.例えば、クライアントは北京にあり、Redisサーバは上海にあり、両地は直線距離1300キロであり、1回のRTT時間=1300 x 2/300000 x 2/3)=13ミリ秒(真空中の光の伝送速度は30万キロ/秒であり、ここでは光ファイバが光速の2/3であると仮定する)では、クライアントは1秒以内に約80回程度の命令しか実行できず、このRedisの高同時高スループット特性は逆行する.
Pipeline(パイプライン)メカニズムは、上記のような問題を改善することができ、Redisコマンドのセットを組み立て、一度のRTTでRedisに転送し、このRedisコマンドの実行結果をクライアントに順次返すことができる.
Jedis Pipeline使用
maven依存:
redis.clients
jedis
2.9.0
Pipelineの操作は次のとおりです.
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
try (Jedis jedis = pool.getResource()) {
//1. Pipeline
Pipeline p = jedis.pipelined();
p.set("fool", "bar");
p.zadd("foo", 1, "barowitch");
p.zadd("foo", 0, "barinsky");
p.zadd("foo", 0, "barikoviev");
Response pipeString = p.get("fool");
Response> sose = p.zrange("foo", 0, -1);
// 2.
p.sync();
int soseSize = sose.get().size();
Set setBack = sose.get();
}
pool.destroy();
原生ロットコマンドとPipelineですね
Pipelineを使用してバッチ操作の効果をシミュレートできますが、使用時には、元のバッチコマンドとの違いに注意してください.主に以下の点が含まれています.