package storage import ( "errors" "fmt" "time" "github.com/gomodule/redigo/redis" ) type Redis struct { client redis.Conn } func NewRedis(addr, user, pass string) (*Redis, error) { opts := []redis.DialOption{} if pass != "" { opts = append(opts, redis.DialPassword(pass)) } opts = append(opts, redis.DialConnectTimeout(time.Second*10)) client, err := redis.Dial("tcp", addr, opts...) return &Redis{ client: client, }, err } func (m *Redis) String() string { return fmt.Sprintf("%v", *m) } func (m *Redis) Close() error { return m.client.Close() } func (m *Redis) List(ns []string, limits ...string) ([]string, error) { return nil, errors.New("not impl") } func (m *Redis) Get(key string, ns ...string) ([]byte, error) { key = resolveNamespace(append(ns, key)) resp, err := m.client.Do("GET", key) if err != nil { return nil, err } if resp == nil { return nil, ErrNotFound } b, ok := resp.([]byte) if !ok { return nil, errors.New("resp not a []byte") } return b, nil } func (m *Redis) Set(key string, value []byte, ns ...string) error { namespace := resolveNamespace(append(ns, key)) _, err := m.client.Do("SET", namespace, value) return err }