2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Redis ClusterとTransactionの動き方メモ

Last updated at Posted at 2019-07-15

RedisにはTransaction機能とCluster機能の両方が実装されています
ここらへんの機能を同時に動くかのかどうかがよく分からなかったので調べてみました

検証は下記のdocker-composeのプロジェクトを使用して行いました
https://github.com/cpapidas/docker-compose-redis-cluster

port=7000,7001,7002でクラスタリングされているredis-clientから2つのクライアントを使ってアクセスします

without transaction

cli.1 $ set foo bar
OK
cli.2 $ get foo 
"bar"
cli.2 $ set foo bal
OK
cli.1 $ get foo
"bal"

普通に順番にアクセスするだけですね

use multi using same key

cli.1 $ multi
OK
cli.1 $ set foo bar
QUEUED
cli.1 $ get foo
QUEUED
cli.2 $ multi 
OK
cli.2 $ get foo
QUEUED
cli.2 $ set foo bag
QUEUED
cli.2 $ get foo
QUEUED
cli.2 $ exec
1) "bal"
2) OK
3) "bag"
OK
cli.1 $ exec
1) OK
2) "bar"

同じキーにアクセスする限り、他ノードへのリダイレクトは発生しません
そのため、execを実行したタイミングでキューイングされたコマンドが実行されます

use multi using different key

cli.1 $ multi
OK
cli.1 $ set foo bal
QUEUED
cli.1 $ set fooo bal
-> Redirected to slot [3916] located at 173.17.0.2:7000
OK
cli.1 $ exec
(error) ERR EXEC without MULTI
cli.1 $ get foo
"bar"
cli.1 $ get fooo
"bal"

multi中にリダイレクトが発生するコマンドが発生すると、キューが溜まっていても
破棄されて、リダイレクトが発生したコマンドが単発で実行されるようです

以上からキーの対象ノード下しかTransactionを使えないことが分かりました。
ClusterとTransaction使用をうまいこと使おうとした場合、アプリケーション層で
がんばらないといけなさそうです。

ライブラリが超頑張ってくれればなんとかなりそうな気もしますが、パッと探してみた感じ出来なさそうです(JVM系で知ってたら誰か教えて)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?