package redis import ( "fmt" "time" "github.com/gomodule/redigo/redis" "qoobing.com/gomod/redis/sentinel" ) func newSentinelPool() *redis.Pool { sntnl := &sentinel.Sentinel{ Addrs: []string{":26379", ":26380", ":26381"}, MasterName: "mymaster", Dial: func(addr string) (redis.Conn, error) { timeout := 500 * time.Millisecond c, err := redis.DialTimeout("tcp", addr, timeout, timeout, timeout) if err != nil { return nil, err } return c, nil }, } return &redis.Pool{ MaxIdle: 3, MaxActive: 64, Wait: true, IdleTimeout: 240 * time.Second, Dial: func() (redis.Conn, error) { masterAddr, err := sntnl.MasterAddr() if err != nil { return nil, err } c, err := redis.Dial("tcp", masterAddr) if err != nil { return nil, err } if !sentinel.TestRole(c, "master") { c.Close() return nil, fmt.Errorf("%s is not redis master", masterAddr) } return c, nil }, } }