chore: refactor code (#1699)

master
Kevin Wan 3 years ago committed by GitHub
parent bbac994c8a
commit ec271db7a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -24,6 +24,7 @@ type (
Expire(key string, seconds int) error Expire(key string, seconds int) error
Expireat(key string, expireTime int64) error Expireat(key string, expireTime int64) error
Get(key string) (string, error) Get(key string) (string, error)
GetSet(key, value string) (string, error)
Hdel(key, field string) (bool, error) Hdel(key, field string) (bool, error)
Hexists(key, field string) (bool, error) Hexists(key, field string) (bool, error)
Hget(key, field string) (string, error) Hget(key, field string) (string, error)
@ -54,7 +55,6 @@ type (
Setex(key, value string, seconds int) error Setex(key, value string, seconds int) error
Setnx(key, value string) (bool, error) Setnx(key, value string) (bool, error)
SetnxEx(key, value string, seconds int) (bool, error) SetnxEx(key, value string, seconds int) (bool, error)
Getset(key, value string) (string, error)
Sismember(key string, value interface{}) (bool, error) Sismember(key string, value interface{}) (bool, error)
Smembers(key string) ([]string, error) Smembers(key string) ([]string, error)
Spop(key string) (string, error) Spop(key string) (string, error)
@ -460,7 +460,7 @@ func (cs clusterStore) SetnxEx(key, value string, seconds int) (bool, error) {
return node.SetnxEx(key, value, seconds) return node.SetnxEx(key, value, seconds)
} }
func (cs clusterStore) Getset(key, value string) (string, error) { func (cs clusterStore) GetSet(key, value string) (string, error) {
node, err := cs.getRedis(key) node, err := cs.getRedis(key)
if err != nil { if err != nil {
return "", err return "", err

@ -492,17 +492,17 @@ func TestRedis_SetExNx(t *testing.T) {
func TestRedis_Getset(t *testing.T) { func TestRedis_Getset(t *testing.T) {
store := clusterStore{dispatcher: hash.NewConsistentHash()} store := clusterStore{dispatcher: hash.NewConsistentHash()}
_, err := store.Getset("hello", "world") _, err := store.GetSet("hello", "world")
assert.NotNil(t, err) assert.NotNil(t, err)
runOnCluster(t, func(client Store) { runOnCluster(t, func(client Store) {
val, err := client.Getset("hello", "world") val, err := client.GetSet("hello", "world")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "", val) assert.Equal(t, "", val)
val, err = client.Get("hello") val, err = client.Get("hello")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "world", val) assert.Equal(t, "world", val)
val, err = client.Getset("hello", "newworld") val, err = client.GetSet("hello", "newworld")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "world", val) assert.Equal(t, "world", val)
val, err = client.Get("hello") val, err = client.Get("hello")

@ -615,51 +615,49 @@ func (s *Redis) GetCtx(ctx context.Context, key string) (val string, err error)
return return
} }
// GetSet is the implementation of redis getset command. // GetBit is the implementation of redis getbit command.
func (s *Redis) GetSet(key, value string) (string, error) { func (s *Redis) GetBit(key string, offset int64) (int, error) {
return s.GetSetCtx(context.Background(), key, value) return s.GetBitCtx(context.Background(), key, offset)
} }
// GetSetCtx is the implementation of redis getset command. // GetBitCtx is the implementation of redis getbit command.
func (s *Redis) GetSetCtx(ctx context.Context, key, value string) (val string, err error) { func (s *Redis) GetBitCtx(ctx context.Context, key string, offset int64) (val int, err error) {
err = s.brk.DoWithAcceptable(func() error { err = s.brk.DoWithAcceptable(func() error {
conn, err := getRedis(s) conn, err := getRedis(s)
if err != nil { if err != nil {
return err return err
} }
if val, err = conn.GetSet(ctx, key, value).Result(); err == red.Nil { v, err := conn.GetBit(ctx, key, offset).Result()
return nil if err != nil {
} else if err != nil {
return err return err
} else {
return nil
} }
val = int(v)
return nil
}, acceptable) }, acceptable)
return return
} }
// GetBit is the implementation of redis getbit command. // GetSet is the implementation of redis getset command.
func (s *Redis) GetBit(key string, offset int64) (int, error) { func (s *Redis) GetSet(key, value string) (string, error) {
return s.GetBitCtx(context.Background(), key, offset) return s.GetSetCtx(context.Background(), key, value)
} }
// GetBitCtx is the implementation of redis getbit command. // GetSetCtx is the implementation of redis getset command.
func (s *Redis) GetBitCtx(ctx context.Context, key string, offset int64) (val int, err error) { func (s *Redis) GetSetCtx(ctx context.Context, key, value string) (val string, err error) {
err = s.brk.DoWithAcceptable(func() error { err = s.brk.DoWithAcceptable(func() error {
conn, err := getRedis(s) conn, err := getRedis(s)
if err != nil { if err != nil {
return err return err
} }
v, err := conn.GetBit(ctx, key, offset).Result() if val, err = conn.GetSet(ctx, key, value).Result(); err == red.Nil {
if err != nil { return nil
return err
} }
val = int(v) return err
return nil
}, acceptable) }, acceptable)
return return

@ -703,9 +703,9 @@ func TestRedis_Set(t *testing.T) {
func TestRedis_GetSet(t *testing.T) { func TestRedis_GetSet(t *testing.T) {
runOnRedis(t, func(client *Redis) { runOnRedis(t, func(client *Redis) {
val, err := New(client.Addr, badType()).GetSet("hello", "world") _, err := New(client.Addr, badType()).GetSet("hello", "world")
assert.NotNil(t, err) assert.NotNil(t, err)
val, err = client.GetSet("hello", "world") val, err := client.GetSet("hello", "world")
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "", val) assert.Equal(t, "", val)
val, err = client.Get("hello") val, err = client.Get("hello")

@ -8,6 +8,7 @@ import (
"github.com/zeromicro/go-zero/rest/internal/encoding" "github.com/zeromicro/go-zero/rest/internal/encoding"
) )
// Parse parses the response.
func Parse(resp *http.Response, val interface{}) error { func Parse(resp *http.Response, val interface{}) error {
if err := ParseHeaders(resp, val); err != nil { if err := ParseHeaders(resp, val); err != nil {
return err return err
@ -16,10 +17,12 @@ func Parse(resp *http.Response, val interface{}) error {
return ParseJsonBody(resp, val) return ParseJsonBody(resp, val)
} }
// ParseHeaders parses the rsponse headers.
func ParseHeaders(resp *http.Response, val interface{}) error { func ParseHeaders(resp *http.Response, val interface{}) error {
return encoding.ParseHeaders(resp.Header, val) return encoding.ParseHeaders(resp.Header, val)
} }
// ParseJsonBody parses the rsponse body, which should be in json content type.
func ParseJsonBody(resp *http.Response, val interface{}) error { func ParseJsonBody(resp *http.Response, val interface{}) error {
if withJsonBody(resp) { if withJsonBody(resp) {
return mapping.UnmarshalJsonReader(resp.Body, val) return mapping.UnmarshalJsonReader(resp.Body, val)

Loading…
Cancel
Save