redigoがredis-cluster対応してない問題
9951 ワード
概要
- goでredis操作する定番のredigoがredis cluster対応されてないので、SET GETなど出来ない
- 一応PRは出てる。https://github.com/garyburd/redigo/pull/170
-
redis-go-clusterは対応してるっぽい
問題点
-
redis-go-clusterでもやってるように、複数Nodeの選択が出来ない
- Node選択が出来ないので、
MOVED 1525 127.0.0.1:6379
(値が別のNodeに格納されてるよ!というエラー)が返ってくる
調査
-
https://github.com/garyburd/redigo/pull/170 をブランチ切って実験
- ノード情報は下記の通り
- redis-go-clusterでもやってるように、複数Nodeの選択が出来ない
- Node選択が出来ないので、
MOVED 1525 127.0.0.1:6379
(値が別のNodeに格納されてるよ!というエラー)が返ってくる
調査
-
https://github.com/garyburd/redigo/pull/170 をブランチ切って実験
- ノード情報は下記の通り
Node | IPとPort |
---|---|
Node1 | 127.0.0.1:6379 |
Node2 | 127.0.0.1:6380 |
Node3 | 127.0.0.1:6381 |
通常メソッドでのSET GET
package main
import (
"fmt"
"os"
// https://github.com/garyburd/redigo/pull/170 分をbranch切ってる状態
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.Dial("tcp", "127.0.0.1:6380") // わかりやすいようにこのポートで
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Connection Close
defer c.Close()
// SET
t, err := c.Do("SET", "hoge", "fuga")
if err != nil {
fmt.Println("SET_ERR", err)
}
fmt.Printf("SET: %#v\n", t)
// GET
s, err := redis.String(c.Do("GET", "hoge"))
if err != nil {
fmt.Println("GET_ERR", err)
}
fmt.Printf("GET: %#v\n", s)
}
// SET_ERR MOVED 1525 127.0.0.1:6379
// SET: "MOVED 1525 127.0.0.1:6379"
// GET_ERR MOVED 1525 127.0.0.1:6379
// GET: ""
Cluster用メソッドを用いたのSET GET
package main
import (
"fmt"
"os"
// https://github.com/garyburd/redigo/pull/170 分をbranch切ってる状態
"github.com/garyburd/redigo/redis"
)
func main() {
c, err := redis.NewCluster("tcp", []string{"127.0.0.1:6379", "127.0.0.1:6380", "127.0.0.1:6381"})
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// Connection Close
defer c.Close()
// SET
t, err := c.Do("SET", "hoge", "fuga")
if err != nil {
fmt.Println("SET_ERR", err)
}
fmt.Printf("SET: %#v\n", t)
// GET
s, err := redis.String(c.Do("GET", "hoge"))
if err != nil {
fmt.Println("GET_ERR", err)
}
fmt.Printf("GET: %#v\n", s)
}
// SET: "OK"
// GET: "fuga"
最後に
- 早くmergeされて欲しい
-
https://github.com/garyburd/redigo/pull/170 がmergeされたらこの記事は消します
Author And Source
この問題について(redigoがredis-cluster対応してない問題), 我々は、より多くの情報をここで見つけました https://qiita.com/sion_cojp/items/9657b27d278ed45ca02e著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .