Source File
command.go
Belonging Package
github.com/go-redis/redis/v8
package redis
import (
)
type Cmder interface {
Name() string
FullName() string
Args() []interface{}
String() string
stringArg(int) string
readTimeout() *time.Duration
readReply(rd *proto.Reader) error
SetErr(error)
Err() error
}
func ( []Cmder, error) {
for , := range {
if .Err() == nil {
.SetErr()
}
}
}
func ( []Cmder) error {
for , := range {
if := .Err(); != nil {
return
}
}
return nil
}
func ( *proto.Writer, []Cmder) error {
for , := range {
if := writeCmd(, ); != nil {
return
}
}
return nil
}
func ( *proto.Writer, Cmder) error {
return .WriteArgs(.Args())
}
func ( Cmder, *CommandInfo) int {
switch .Name() {
case "eval", "evalsha":
if .stringArg(2) != "0" {
return 3
}
return 0
case "publish":
return 1
if .stringArg(1) == "usage" {
return 2
}
}
if == nil {
return 0
}
return int(.FirstKeyPos)
}
func ( Cmder, interface{}) string {
:= make([]byte, 0, 64)
for , := range .Args() {
if > 0 {
= append(, ' ')
}
= internal.AppendArg(, )
}
if := .Err(); != nil {
= append(, ": "...)
= append(, .Error()...)
} else if != nil {
= append(, ": "...)
= internal.AppendArg(, )
}
return internal.String()
}
return internal.ToLower(.stringArg(0))
}
func ( *baseCmd) () string {
switch := .Name(); {
case "cluster", "command":
if len(.args) == 1 {
return
}
if , := .args[1].(string); {
return + " " +
}
return
default:
return
}
}
func ( *baseCmd) () []interface{} {
return .args
}
func ( *baseCmd) ( int) string {
if < 0 || >= len(.args) {
return ""
}
, := .args[].(string)
return
}
func ( *baseCmd) ( error) {
.err =
}
func ( *baseCmd) () error {
return .err
}
func ( *baseCmd) () *time.Duration {
return ._readTimeout
}
func ( *baseCmd) ( time.Duration) {
._readTimeout = &
}
type Cmd struct {
baseCmd
val interface{}
}
func ( context.Context, ...interface{}) *Cmd {
return &Cmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *Cmd) () string {
return cmdString(, .val)
}
func ( *Cmd) () interface{} {
return .val
}
func ( *Cmd) () (interface{}, error) {
return .val, .err
}
func ( *Cmd) () (string, error) {
if .err != nil {
return "", .err
}
switch val := .val.(type) {
case string:
return , nil
default:
:= fmt.Errorf("redis: unexpected type=%T for String", )
return "",
}
}
func ( *Cmd) () (int, error) {
if .err != nil {
return 0, .err
}
switch val := .val.(type) {
case int64:
return int(), nil
case string:
return strconv.Atoi()
default:
:= fmt.Errorf("redis: unexpected type=%T for Int", )
return 0,
}
}
func ( *Cmd) () (int64, error) {
if .err != nil {
return 0, .err
}
switch val := .val.(type) {
case int64:
return , nil
case string:
return strconv.ParseInt(, 10, 64)
default:
:= fmt.Errorf("redis: unexpected type=%T for Int64", )
return 0,
}
}
func ( *Cmd) () (uint64, error) {
if .err != nil {
return 0, .err
}
switch val := .val.(type) {
case int64:
return uint64(), nil
case string:
return strconv.ParseUint(, 10, 64)
default:
:= fmt.Errorf("redis: unexpected type=%T for Uint64", )
return 0,
}
}
func ( *Cmd) () (float32, error) {
if .err != nil {
return 0, .err
}
switch val := .val.(type) {
case int64:
return float32(), nil
case string:
, := strconv.ParseFloat(, 32)
if != nil {
return 0,
}
return float32(), nil
default:
:= fmt.Errorf("redis: unexpected type=%T for Float32", )
return 0,
}
}
func ( *Cmd) () (float64, error) {
if .err != nil {
return 0, .err
}
switch val := .val.(type) {
case int64:
return float64(), nil
case string:
return strconv.ParseFloat(, 64)
default:
:= fmt.Errorf("redis: unexpected type=%T for Float64", )
return 0,
}
}
func ( *Cmd) () (bool, error) {
if .err != nil {
return false, .err
}
switch val := .val.(type) {
case int64:
return != 0, nil
case string:
return strconv.ParseBool()
default:
:= fmt.Errorf("redis: unexpected type=%T for Bool", )
return false,
}
}
func ( *Cmd) ( *proto.Reader) error {
.val, .err = .ReadReply(sliceParser)
return .err
}
type SliceCmd struct {
baseCmd
val []interface{}
}
var _ Cmder = (*SliceCmd)(nil)
func ( context.Context, ...interface{}) *SliceCmd {
return &SliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *SliceCmd) () []interface{} {
return .val
}
func ( *SliceCmd) () ([]interface{}, error) {
return .val, .err
}
func ( *SliceCmd) () string {
return cmdString(, .val)
}
func ( *SliceCmd) ( *proto.Reader) error {
var interface{}
, .err = .ReadArrayReply(sliceParser)
if .err != nil {
return .err
}
.val = .([]interface{})
return nil
}
type StatusCmd struct {
baseCmd
val string
}
var _ Cmder = (*StatusCmd)(nil)
func ( context.Context, ...interface{}) *StatusCmd {
return &StatusCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StatusCmd) () string {
return .val
}
func ( *StatusCmd) () (string, error) {
return .val, .err
}
func ( *StatusCmd) () string {
return cmdString(, .val)
}
func ( *StatusCmd) ( *proto.Reader) error {
.val, .err = .ReadString()
return .err
}
type IntCmd struct {
baseCmd
val int64
}
var _ Cmder = (*IntCmd)(nil)
func ( context.Context, ...interface{}) *IntCmd {
return &IntCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *IntCmd) () int64 {
return .val
}
func ( *IntCmd) () (int64, error) {
return .val, .err
}
func ( *IntCmd) () (uint64, error) {
return uint64(.val), .err
}
func ( *IntCmd) () string {
return cmdString(, .val)
}
func ( *IntCmd) ( *proto.Reader) error {
.val, .err = .ReadIntReply()
return .err
}
type IntSliceCmd struct {
baseCmd
val []int64
}
var _ Cmder = (*IntSliceCmd)(nil)
func ( context.Context, ...interface{}) *IntSliceCmd {
return &IntSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *IntSliceCmd) () []int64 {
return .val
}
func ( *IntSliceCmd) () ([]int64, error) {
return .val, .err
}
func ( *IntSliceCmd) () string {
return cmdString(, .val)
}
func ( *IntSliceCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]int64, )
for := 0; < len(.val); ++ {
, := .ReadIntReply()
if != nil {
return nil,
}
.val[] =
}
return nil, nil
})
return .err
}
type DurationCmd struct {
baseCmd
val time.Duration
precision time.Duration
}
var _ Cmder = (*DurationCmd)(nil)
func ( context.Context, time.Duration, ...interface{}) *DurationCmd {
return &DurationCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
precision: ,
}
}
func ( *DurationCmd) () time.Duration {
return .val
}
func ( *DurationCmd) () (time.Duration, error) {
return .val, .err
}
func ( *DurationCmd) () string {
return cmdString(, .val)
}
func ( *DurationCmd) ( *proto.Reader) error {
var int64
, .err = .ReadIntReply()
if .err != nil {
return .err
}
type TimeCmd struct {
baseCmd
val time.Time
}
var _ Cmder = (*TimeCmd)(nil)
func ( context.Context, ...interface{}) *TimeCmd {
return &TimeCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *TimeCmd) () time.Time {
return .val
}
func ( *TimeCmd) () (time.Time, error) {
return .val, .err
}
func ( *TimeCmd) () string {
return cmdString(, .val)
}
func ( *TimeCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 2 {
return nil, fmt.Errorf("got %d elements, expected 2", )
}
, := .ReadInt()
if != nil {
return nil,
}
, := .ReadInt()
if != nil {
return nil,
}
.val = time.Unix(, *1000)
return nil, nil
})
return .err
}
type BoolCmd struct {
baseCmd
val bool
}
var _ Cmder = (*BoolCmd)(nil)
func ( context.Context, ...interface{}) *BoolCmd {
return &BoolCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *BoolCmd) () bool {
return .val
}
func ( *BoolCmd) () (bool, error) {
return .val, .err
}
func ( *BoolCmd) () string {
return cmdString(, .val)
}
func ( *BoolCmd) ( *proto.Reader) error {
var interface{}
type StringCmd struct {
baseCmd
val string
}
var _ Cmder = (*StringCmd)(nil)
func ( context.Context, ...interface{}) *StringCmd {
return &StringCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StringCmd) () string {
return .val
}
func ( *StringCmd) () (string, error) {
return .Val(), .err
}
func ( *StringCmd) () ([]byte, error) {
return util.StringToBytes(.val), .err
}
func ( *StringCmd) () (int, error) {
if .err != nil {
return 0, .err
}
return strconv.Atoi(.Val())
}
func ( *StringCmd) () (int64, error) {
if .err != nil {
return 0, .err
}
return strconv.ParseInt(.Val(), 10, 64)
}
func ( *StringCmd) () (uint64, error) {
if .err != nil {
return 0, .err
}
return strconv.ParseUint(.Val(), 10, 64)
}
func ( *StringCmd) () (float32, error) {
if .err != nil {
return 0, .err
}
, := strconv.ParseFloat(.Val(), 32)
if != nil {
return 0,
}
return float32(), nil
}
func ( *StringCmd) () (float64, error) {
if .err != nil {
return 0, .err
}
return strconv.ParseFloat(.Val(), 64)
}
func ( *StringCmd) () (time.Time, error) {
if .err != nil {
return time.Time{}, .err
}
return time.Parse(time.RFC3339Nano, .Val())
}
func ( *StringCmd) ( interface{}) error {
if .err != nil {
return .err
}
return proto.Scan([]byte(.val), )
}
func ( *StringCmd) () string {
return cmdString(, .val)
}
func ( *StringCmd) ( *proto.Reader) error {
.val, .err = .ReadString()
return .err
}
type FloatCmd struct {
baseCmd
val float64
}
var _ Cmder = (*FloatCmd)(nil)
func ( context.Context, ...interface{}) *FloatCmd {
return &FloatCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *FloatCmd) () float64 {
return .val
}
func ( *FloatCmd) () (float64, error) {
return .Val(), .Err()
}
func ( *FloatCmd) () string {
return cmdString(, .val)
}
func ( *FloatCmd) ( *proto.Reader) error {
.val, .err = .ReadFloatReply()
return .err
}
type StringSliceCmd struct {
baseCmd
val []string
}
var _ Cmder = (*StringSliceCmd)(nil)
func ( context.Context, ...interface{}) *StringSliceCmd {
return &StringSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StringSliceCmd) () []string {
return .val
}
func ( *StringSliceCmd) () ([]string, error) {
return .Val(), .Err()
}
func ( *StringSliceCmd) () string {
return cmdString(, .val)
}
func ( *StringSliceCmd) ( interface{}) error {
return proto.ScanSlice(.Val(), )
}
func ( *StringSliceCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]string, )
for := 0; < len(.val); ++ {
switch , := .ReadString(); {
case == Nil:
.val[] = ""
case != nil:
return nil,
default:
.val[] =
}
}
return nil, nil
})
return .err
}
type BoolSliceCmd struct {
baseCmd
val []bool
}
var _ Cmder = (*BoolSliceCmd)(nil)
func ( context.Context, ...interface{}) *BoolSliceCmd {
return &BoolSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *BoolSliceCmd) () []bool {
return .val
}
func ( *BoolSliceCmd) () ([]bool, error) {
return .val, .err
}
func ( *BoolSliceCmd) () string {
return cmdString(, .val)
}
func ( *BoolSliceCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]bool, )
for := 0; < len(.val); ++ {
, := .ReadIntReply()
if != nil {
return nil,
}
.val[] = == 1
}
return nil, nil
})
return .err
}
type StringStringMapCmd struct {
baseCmd
val map[string]string
}
var _ Cmder = (*StringStringMapCmd)(nil)
func ( context.Context, ...interface{}) *StringStringMapCmd {
return &StringStringMapCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StringStringMapCmd) () map[string]string {
return .val
}
func ( *StringStringMapCmd) () (map[string]string, error) {
return .val, .err
}
func ( *StringStringMapCmd) () string {
return cmdString(, .val)
}
func ( *StringStringMapCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make(map[string]string, /2)
for := int64(0); < ; += 2 {
, := .ReadString()
if != nil {
return nil,
}
, := .ReadString()
if != nil {
return nil,
}
.val[] =
}
return nil, nil
})
return .err
}
type StringIntMapCmd struct {
baseCmd
val map[string]int64
}
var _ Cmder = (*StringIntMapCmd)(nil)
func ( context.Context, ...interface{}) *StringIntMapCmd {
return &StringIntMapCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StringIntMapCmd) () map[string]int64 {
return .val
}
func ( *StringIntMapCmd) () (map[string]int64, error) {
return .val, .err
}
func ( *StringIntMapCmd) () string {
return cmdString(, .val)
}
func ( *StringIntMapCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make(map[string]int64, /2)
for := int64(0); < ; += 2 {
, := .ReadString()
if != nil {
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
.val[] =
}
return nil, nil
})
return .err
}
type StringStructMapCmd struct {
baseCmd
val map[string]struct{}
}
var _ Cmder = (*StringStructMapCmd)(nil)
func ( context.Context, ...interface{}) *StringStructMapCmd {
return &StringStructMapCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *StringStructMapCmd) () map[string]struct{} {
return .val
}
func ( *StringStructMapCmd) () (map[string]struct{}, error) {
return .val, .err
}
func ( *StringStructMapCmd) () string {
return cmdString(, .val)
}
func ( *StringStructMapCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make(map[string]struct{}, )
for := int64(0); < ; ++ {
, := .ReadString()
if != nil {
return nil,
}
.val[] = struct{}{}
}
return nil, nil
})
return .err
}
type XMessage struct {
ID string
Values map[string]interface{}
}
type XMessageSliceCmd struct {
baseCmd
val []XMessage
}
var _ Cmder = (*XMessageSliceCmd)(nil)
func ( context.Context, ...interface{}) *XMessageSliceCmd {
return &XMessageSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *XMessageSliceCmd) () []XMessage {
return .val
}
func ( *XMessageSliceCmd) () ([]XMessage, error) {
return .val, .err
}
func ( *XMessageSliceCmd) () string {
return cmdString(, .val)
}
func ( *XMessageSliceCmd) ( *proto.Reader) error {
var interface{}
, .err = .ReadArrayReply(xMessageSliceParser)
if .err != nil {
return .err
}
.val = .([]XMessage)
return nil
}
func ( *proto.Reader, int64) (interface{}, error) {
:= make([]XMessage, )
for := 0; < len(); ++ {
:=
, := .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
, := .ReadString()
if != nil {
return nil,
}
var map[string]interface{}
, := .ReadArrayReply(stringInterfaceMapParser)
if != nil {
if != proto.Nil {
return nil,
}
} else {
= .(map[string]interface{})
}
[] = XMessage{
ID: ,
Values: ,
}
return nil, nil
})
if != nil {
return nil,
}
}
return , nil
}
type XStream struct {
Stream string
Messages []XMessage
}
type XStreamSliceCmd struct {
baseCmd
val []XStream
}
var _ Cmder = (*XStreamSliceCmd)(nil)
func ( context.Context, ...interface{}) *XStreamSliceCmd {
return &XStreamSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *XStreamSliceCmd) () []XStream {
return .val
}
func ( *XStreamSliceCmd) () ([]XStream, error) {
return .val, .err
}
func ( *XStreamSliceCmd) () string {
return cmdString(, .val)
}
func ( *XStreamSliceCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]XStream, )
for := 0; < len(.val); ++ {
:=
, := .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 2 {
return nil, fmt.Errorf("got %d, wanted 2", )
}
, := .ReadString()
if != nil {
return nil,
}
, := .ReadArrayReply(xMessageSliceParser)
if != nil {
return nil,
}
.val[] = XStream{
Stream: ,
Messages: .([]XMessage),
}
return nil, nil
})
if != nil {
return nil,
}
}
return nil, nil
})
return .err
}
type XPending struct {
Count int64
Lower string
Higher string
Consumers map[string]int64
}
type XPendingCmd struct {
baseCmd
val *XPending
}
var _ Cmder = (*XPendingCmd)(nil)
func ( context.Context, ...interface{}) *XPendingCmd {
return &XPendingCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *XPendingCmd) () *XPending {
return .val
}
func ( *XPendingCmd) () (*XPending, error) {
return .val, .err
}
func ( *XPendingCmd) () string {
return cmdString(, .val)
}
func ( *XPendingCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 4 {
return nil, fmt.Errorf("got %d, wanted 4", )
}
, := .ReadIntReply()
if != nil {
return nil,
}
, := .ReadString()
if != nil && != Nil {
return nil,
}
, := .ReadString()
if != nil && != Nil {
return nil,
}
.val = &XPending{
Count: ,
Lower: ,
Higher: ,
}
_, = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
for := int64(0); < ; ++ {
_, = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 2 {
return nil, fmt.Errorf("got %d, wanted 2", )
}
, := .ReadString()
if != nil {
return nil,
}
, := .ReadInt()
if != nil {
return nil,
}
if .val.Consumers == nil {
.val.Consumers = make(map[string]int64)
}
.val.Consumers[] =
return nil, nil
})
if != nil {
return nil,
}
}
return nil, nil
})
if != nil && != Nil {
return nil,
}
return nil, nil
})
return .err
}
type XPendingExt struct {
ID string
Consumer string
Idle time.Duration
RetryCount int64
}
type XPendingExtCmd struct {
baseCmd
val []XPendingExt
}
var _ Cmder = (*XPendingExtCmd)(nil)
func ( context.Context, ...interface{}) *XPendingExtCmd {
return &XPendingExtCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *XPendingExtCmd) () []XPendingExt {
return .val
}
func ( *XPendingExtCmd) () ([]XPendingExt, error) {
return .val, .err
}
func ( *XPendingExtCmd) () string {
return cmdString(, .val)
}
func ( *XPendingExtCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]XPendingExt, 0, )
for := int64(0); < ; ++ {
, := .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 4 {
return nil, fmt.Errorf("got %d, wanted 4", )
}
, := .ReadString()
if != nil {
return nil,
}
, := .ReadString()
if != nil && != Nil {
return nil,
}
, := .ReadIntReply()
if != nil && != Nil {
return nil,
}
, := .ReadIntReply()
if != nil && != Nil {
return nil,
}
.val = append(.val, XPendingExt{
ID: ,
Consumer: ,
Idle: time.Duration() * time.Millisecond,
RetryCount: ,
})
return nil, nil
})
if != nil {
return nil,
}
}
return nil, nil
})
return .err
}
type XInfoGroupsCmd struct {
baseCmd
val []XInfoGroups
}
type XInfoGroups struct {
Name string
Consumers int64
Pending int64
LastDeliveredID string
}
var _ Cmder = (*XInfoGroupsCmd)(nil)
func ( context.Context, string) *XInfoGroupsCmd {
return &XInfoGroupsCmd{
baseCmd: baseCmd{
ctx: ,
args: []interface{}{"xinfo", "groups", },
},
}
}
func ( *XInfoGroupsCmd) () []XInfoGroups {
return .val
}
func ( *XInfoGroupsCmd) () ([]XInfoGroups, error) {
return .val, .err
}
func ( *XInfoGroupsCmd) () string {
return cmdString(, .val)
}
func ( *XInfoGroupsCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(
func( *proto.Reader, int64) (interface{}, error) {
for := int64(0); < ; ++ {
, := .ReadReply(xGroupInfoParser)
if != nil {
return nil,
}
.val = append(.val, .(XInfoGroups))
}
return nil, nil
})
return nil
}
func ( *proto.Reader, int64) (interface{}, error) {
if != 8 {
return nil, fmt.Errorf("redis: got %d elements in XINFO GROUPS reply,"+
"wanted 8", )
}
var (
error
XInfoGroups
string
string
)
for := 0; < 4; ++ {
, = .ReadString()
if != nil {
return nil,
}
, = .ReadString()
if != nil {
return nil,
}
switch {
case "name":
.Name =
case "consumers":
.Consumers, = strconv.ParseInt(, 0, 64)
case "pending":
.Pending, = strconv.ParseInt(, 0, 64)
case "last-delivered-id":
.LastDeliveredID =
default:
return nil, fmt.Errorf("redis: unexpected content %s "+
"in XINFO GROUPS reply", )
}
if != nil {
return nil,
}
}
return ,
}
type ZSliceCmd struct {
baseCmd
val []Z
}
var _ Cmder = (*ZSliceCmd)(nil)
func ( context.Context, ...interface{}) *ZSliceCmd {
return &ZSliceCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *ZSliceCmd) () []Z {
return .val
}
func ( *ZSliceCmd) () ([]Z, error) {
return .val, .err
}
func ( *ZSliceCmd) () string {
return cmdString(, .val)
}
func ( *ZSliceCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]Z, /2)
for := 0; < len(.val); ++ {
, := .ReadString()
if != nil {
return nil,
}
, := .ReadFloatReply()
if != nil {
return nil,
}
.val[] = Z{
Member: ,
Score: ,
}
}
return nil, nil
})
return .err
}
type ZWithKeyCmd struct {
baseCmd
val *ZWithKey
}
var _ Cmder = (*ZWithKeyCmd)(nil)
func ( context.Context, ...interface{}) *ZWithKeyCmd {
return &ZWithKeyCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *ZWithKeyCmd) () *ZWithKey {
return .val
}
func ( *ZWithKeyCmd) () (*ZWithKey, error) {
return .Val(), .Err()
}
func ( *ZWithKeyCmd) () string {
return cmdString(, .val)
}
func ( *ZWithKeyCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
if != 3 {
return nil, fmt.Errorf("got %d elements, expected 3", )
}
.val = &ZWithKey{}
var error
.val.Key, = .ReadString()
if != nil {
return nil,
}
.val.Member, = .ReadString()
if != nil {
return nil,
}
.val.Score, = .ReadFloatReply()
if != nil {
return nil,
}
return nil, nil
})
return .err
}
type ScanCmd struct {
baseCmd
page []string
cursor uint64
process cmdable
}
var _ Cmder = (*ScanCmd)(nil)
func ( context.Context, cmdable, ...interface{}) *ScanCmd {
return &ScanCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
process: ,
}
}
func ( *ScanCmd) () ( []string, uint64) {
return .page, .cursor
}
func ( *ScanCmd) () ( []string, uint64, error) {
return .page, .cursor, .err
}
func ( *ScanCmd) () string {
return cmdString(, .page)
}
func ( *ScanCmd) ( *proto.Reader) error {
.page, .cursor, .err = .ReadScanReply()
return .err
}
func ( *ScanCmd) () *ScanIterator {
return &ScanIterator{
cmd: ,
}
}
type ClusterNode struct {
ID string
Addr string
}
type ClusterSlot struct {
Start int
End int
Nodes []ClusterNode
}
type ClusterSlotsCmd struct {
baseCmd
val []ClusterSlot
}
var _ Cmder = (*ClusterSlotsCmd)(nil)
func ( context.Context, ...interface{}) *ClusterSlotsCmd {
return &ClusterSlotsCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *ClusterSlotsCmd) () []ClusterSlot {
return .val
}
func ( *ClusterSlotsCmd) () ([]ClusterSlot, error) {
return .Val(), .Err()
}
func ( *ClusterSlotsCmd) () string {
return cmdString(, .val)
}
func ( *ClusterSlotsCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]ClusterSlot, )
for := 0; < len(.val); ++ {
, := .ReadArrayLen()
if != nil {
return nil,
}
if < 2 {
:= fmt.Errorf("redis: got %d elements in cluster info, expected at least 2", )
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
:= make([]ClusterNode, -2)
for := 0; < len(); ++ {
, := .ReadArrayLen()
if != nil {
return nil,
}
if != 2 && != 3 {
:= fmt.Errorf("got %d elements in cluster info address, expected 2 or 3", )
return nil,
}
, := .ReadString()
if != nil {
return nil,
}
, := .ReadString()
if != nil {
return nil,
}
[].Addr = net.JoinHostPort(, )
if == 3 {
, := .ReadString()
if != nil {
return nil,
}
[].ID =
}
}
.val[] = ClusterSlot{
Start: int(),
End: int(),
Nodes: ,
}
}
return nil, nil
})
return .err
}
type GeoRadiusQuery struct {
Sort string
Store string
StoreDist string
}
type GeoLocationCmd struct {
baseCmd
q *GeoRadiusQuery
locations []GeoLocation
}
var _ Cmder = (*GeoLocationCmd)(nil)
func ( context.Context, *GeoRadiusQuery, ...interface{}) *GeoLocationCmd {
return &GeoLocationCmd{
baseCmd: baseCmd{
ctx: ,
args: geoLocationArgs(, ...),
},
q: ,
}
}
func ( *GeoRadiusQuery, ...interface{}) []interface{} {
= append(, .Radius)
if .Unit != "" {
= append(, .Unit)
} else {
= append(, "km")
}
if .WithCoord {
= append(, "withcoord")
}
if .WithDist {
= append(, "withdist")
}
if .WithGeoHash {
= append(, "withhash")
}
if .Count > 0 {
= append(, "count", .Count)
}
if .Sort != "" {
= append(, .Sort)
}
if .Store != "" {
= append(, "store")
= append(, .Store)
}
if .StoreDist != "" {
= append(, "storedist")
= append(, .StoreDist)
}
return
}
func ( *GeoLocationCmd) () []GeoLocation {
return .locations
}
func ( *GeoLocationCmd) () ([]GeoLocation, error) {
return .locations, .err
}
func ( *GeoLocationCmd) () string {
return cmdString(, .locations)
}
func ( *GeoLocationCmd) ( *proto.Reader) error {
var interface{}
, .err = .ReadArrayReply(newGeoLocationSliceParser(.q))
if .err != nil {
return .err
}
.locations = .([]GeoLocation)
return nil
}
func ( *GeoRadiusQuery) proto.MultiBulkParse {
return func( *proto.Reader, int64) (interface{}, error) {
:= make([]GeoLocation, 0, )
for := int64(0); < ; ++ {
, := .ReadReply(newGeoLocationParser())
if != nil {
return nil,
}
switch vv := .(type) {
case string:
= append(, GeoLocation{
Name: ,
})
= append(, *)
default:
return nil, fmt.Errorf("got %T, expected string or *GeoLocation", )
}
}
return , nil
}
}
func ( *GeoRadiusQuery) proto.MultiBulkParse {
return func( *proto.Reader, int64) (interface{}, error) {
var GeoLocation
var error
.Name, = .ReadString()
if != nil {
return nil,
}
if .WithDist {
.Dist, = .ReadFloatReply()
if != nil {
return nil,
}
}
if .WithGeoHash {
.GeoHash, = .ReadIntReply()
if != nil {
return nil,
}
}
if .WithCoord {
, := .ReadArrayLen()
if != nil {
return nil,
}
if != 2 {
return nil, fmt.Errorf("got %d coordinates, expected 2", )
}
.Longitude, = .ReadFloatReply()
if != nil {
return nil,
}
.Latitude, = .ReadFloatReply()
if != nil {
return nil,
}
}
return &, nil
}
}
type GeoPos struct {
Longitude, Latitude float64
}
type GeoPosCmd struct {
baseCmd
val []*GeoPos
}
var _ Cmder = (*GeoPosCmd)(nil)
func ( context.Context, ...interface{}) *GeoPosCmd {
return &GeoPosCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *GeoPosCmd) () []*GeoPos {
return .val
}
func ( *GeoPosCmd) () ([]*GeoPos, error) {
return .Val(), .Err()
}
func ( *GeoPosCmd) () string {
return cmdString(, .val)
}
func ( *GeoPosCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]*GeoPos, )
for := 0; < len(.val); ++ {
:=
, := .ReadReply(func( *proto.Reader, int64) (interface{}, error) {
, := .ReadFloatReply()
if != nil {
return nil,
}
, := .ReadFloatReply()
if != nil {
return nil,
}
.val[] = &GeoPos{
Longitude: ,
Latitude: ,
}
return nil, nil
})
if != nil {
if == Nil {
.val[] = nil
continue
}
return nil,
}
}
return nil, nil
})
return .err
}
type CommandInfo struct {
Name string
Arity int8
Flags []string
ACLFlags []string
FirstKeyPos int8
LastKeyPos int8
StepCount int8
ReadOnly bool
}
type CommandsInfoCmd struct {
baseCmd
val map[string]*CommandInfo
}
var _ Cmder = (*CommandsInfoCmd)(nil)
func ( context.Context, ...interface{}) *CommandsInfoCmd {
return &CommandsInfoCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *CommandsInfoCmd) () map[string]*CommandInfo {
return .val
}
func ( *CommandsInfoCmd) () (map[string]*CommandInfo, error) {
return .Val(), .Err()
}
func ( *CommandsInfoCmd) () string {
return cmdString(, .val)
}
func ( *CommandsInfoCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make(map[string]*CommandInfo, )
for := int64(0); < ; ++ {
, := .ReadReply(commandInfoParser)
if != nil {
return nil,
}
:= .(*CommandInfo)
.val[.Name] =
}
return nil, nil
})
return .err
}
func ( *proto.Reader, int64) (interface{}, error) {
const = 6
const = 7
switch {
default:
return nil, fmt.Errorf("redis: got %d elements in COMMAND reply, wanted 7", )
}
var CommandInfo
var error
.Name, = .ReadString()
if != nil {
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
.Arity = int8()
_, = .ReadReply(func( *proto.Reader, int64) (interface{}, error) {
.Flags = make([]string, )
for := 0; < len(.Flags); ++ {
switch , := .ReadString(); {
case == Nil:
.Flags[] = ""
case != nil:
return nil,
default:
.Flags[] =
}
}
return nil, nil
})
if != nil {
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
.FirstKeyPos = int8()
, := .ReadIntReply()
if != nil {
return nil,
}
.LastKeyPos = int8()
, := .ReadIntReply()
if != nil {
return nil,
}
.StepCount = int8()
for , := range .Flags {
if == "readonly" {
.ReadOnly = true
break
}
}
if == {
return &, nil
}
_, = .ReadReply(func( *proto.Reader, int64) (interface{}, error) {
.ACLFlags = make([]string, )
for := 0; < len(.ACLFlags); ++ {
switch , := .ReadString(); {
case == Nil:
.ACLFlags[] = ""
case != nil:
return nil,
default:
.ACLFlags[] =
}
}
return nil, nil
})
if != nil {
return nil,
}
return &, nil
}
type cmdsInfoCache struct {
fn func() (map[string]*CommandInfo, error)
once internal.Once
cmds map[string]*CommandInfo
}
func ( func() (map[string]*CommandInfo, error)) *cmdsInfoCache {
return &cmdsInfoCache{
fn: ,
}
}
func ( *cmdsInfoCache) () (map[string]*CommandInfo, error) {
:= .once.Do(func() error {
, := .fn()
if != nil {
return
}
ClientAddr string
ClientName string
}
type SlowLogCmd struct {
baseCmd
val []SlowLog
}
var _ Cmder = (*SlowLogCmd)(nil)
func ( context.Context, ...interface{}) *SlowLogCmd {
return &SlowLogCmd{
baseCmd: baseCmd{
ctx: ,
args: ,
},
}
}
func ( *SlowLogCmd) () []SlowLog {
return .val
}
func ( *SlowLogCmd) () ([]SlowLog, error) {
return .Val(), .Err()
}
func ( *SlowLogCmd) () string {
return cmdString(, .val)
}
func ( *SlowLogCmd) ( *proto.Reader) error {
_, .err = .ReadArrayReply(func( *proto.Reader, int64) (interface{}, error) {
.val = make([]SlowLog, )
for := 0; < len(.val); ++ {
, := .ReadArrayLen()
if != nil {
return nil,
}
if < 4 {
:= fmt.Errorf("redis: got %d elements in slowlog get, expected at least 4", )
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
, := .ReadIntReply()
if != nil {
return nil,
}
:= time.Unix(, 0)
, := .ReadIntReply()
if != nil {
return nil,
}
:= time.Duration() * time.Microsecond
, := .ReadArrayLen()
if != nil {
return nil,
}
if < 1 {
:= fmt.Errorf("redis: got %d elements commands reply in slowlog get, expected at least 1", )
return nil,
}
:= make([]string, )
for := 0; < int(); ++ {
[], = .ReadString()
if != nil {
return nil,
}
}
var , string
for := 4; < int(); ++ {
, := .ReadString()
if != nil {
return nil,
}
if == 4 {
=
} else if == 5 {
=
}
}
.val[] = SlowLog{
ID: ,
Time: ,
Duration: ,
Args: ,
ClientAddr: ,
ClientName: ,
}
}
return nil, nil
})
return .err
![]() |
The pages are generated with Golds v0.3.2-preview. (GOOS=darwin GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @Go100and1 (reachable from the left QR code) to get the latest news of Golds. |