//go:build !ignore_autogenerated
// +build !ignore_autogenerated

// Code generated by iocli, run 'iocli gen' to re-generate

package redis

import (
	contextx "context"
	timex "time"

	go_redisredis "github.com/go-redis/redis"

	"github.com/alibaba/ioc-golang/autowire"
	normal "github.com/alibaba/ioc-golang/autowire/normal"
	singleton "github.com/alibaba/ioc-golang/autowire/singleton"
	util "github.com/alibaba/ioc-golang/autowire/util"
)

func init() {
	normal.RegisterStructDescriptor(&autowire.StructDescriptor{
		Factory: func() interface{} {
			return &redis_{}
		},
	})
	redisStructDescriptor := &autowire.StructDescriptor{
		Factory: func() interface{} {
			return &Redis{}
		},
		ParamFactory: func() interface{} {
			var _ paramInterface = &Param{}
			return &Param{}
		},
		ConstructFunc: func(i interface{}, p interface{}) (interface{}, error) {
			param := p.(paramInterface)
			impl := i.(*Redis)
			return param.New(impl)
		},
		Metadata: map[string]interface{}{
			"aop":      map[string]interface{}{},
			"autowire": map[string]interface{}{},
		},
	}
	normal.RegisterStructDescriptor(redisStructDescriptor)
	singleton.RegisterStructDescriptor(redisStructDescriptor)
}

type paramInterface interface {
	New(impl *Redis) (*Redis, error)
}
type redis_ struct {
	Command_                    func() *go_redisredis.CommandsInfoCmd
	ClientGetName_              func() *go_redisredis.StringCmd
	Echo_                       func(message interface{}) *go_redisredis.StringCmd
	Ping_                       func() *go_redisredis.StatusCmd
	Quit_                       func() *go_redisredis.StatusCmd
	Del_                        func(keys ...string) *go_redisredis.IntCmd
	Unlink_                     func(keys ...string) *go_redisredis.IntCmd
	Dump_                       func(key string) *go_redisredis.StringCmd
	Exists_                     func(keys ...string) *go_redisredis.IntCmd
	Expire_                     func(key string, expiration timex.Duration) *go_redisredis.BoolCmd
	ExpireAt_                   func(key string, tm timex.Time) *go_redisredis.BoolCmd
	Keys_                       func(pattern string) *go_redisredis.StringSliceCmd
	Migrate_                    func(host, port, key string, db int64, timeout timex.Duration) *go_redisredis.StatusCmd
	Move_                       func(key string, db int64) *go_redisredis.BoolCmd
	ObjectRefCount_             func(key string) *go_redisredis.IntCmd
	ObjectEncoding_             func(key string) *go_redisredis.StringCmd
	ObjectIdleTime_             func(key string) *go_redisredis.DurationCmd
	Persist_                    func(key string) *go_redisredis.BoolCmd
	PExpire_                    func(key string, expiration timex.Duration) *go_redisredis.BoolCmd
	PExpireAt_                  func(key string, tm timex.Time) *go_redisredis.BoolCmd
	PTTL_                       func(key string) *go_redisredis.DurationCmd
	RandomKey_                  func() *go_redisredis.StringCmd
	Rename_                     func(key, newkey string) *go_redisredis.StatusCmd
	RenameNX_                   func(key, newkey string) *go_redisredis.BoolCmd
	Restore_                    func(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd
	RestoreReplace_             func(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd
	Sort_                       func(key string, sort *go_redisredis.Sort) *go_redisredis.StringSliceCmd
	SortStore_                  func(key, store string, sort *go_redisredis.Sort) *go_redisredis.IntCmd
	SortInterfaces_             func(key string, sort *go_redisredis.Sort) *go_redisredis.SliceCmd
	Touch_                      func(keys ...string) *go_redisredis.IntCmd
	TTL_                        func(key string) *go_redisredis.DurationCmd
	Type_                       func(key string) *go_redisredis.StatusCmd
	Scan_                       func(cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	SScan_                      func(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	HScan_                      func(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	ZScan_                      func(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	Append_                     func(key, value string) *go_redisredis.IntCmd
	BitCount_                   func(key string, bitCount *go_redisredis.BitCount) *go_redisredis.IntCmd
	BitOpAnd_                   func(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpOr_                    func(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpXor_                   func(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpNot_                   func(destKey string, key string) *go_redisredis.IntCmd
	BitPos_                     func(key string, bit int64, pos ...int64) *go_redisredis.IntCmd
	Decr_                       func(key string) *go_redisredis.IntCmd
	DecrBy_                     func(key string, decrement int64) *go_redisredis.IntCmd
	Get_                        func(key string) *go_redisredis.StringCmd
	GetBit_                     func(key string, offset int64) *go_redisredis.IntCmd
	GetRange_                   func(key string, start, end int64) *go_redisredis.StringCmd
	GetSet_                     func(key string, value interface{}) *go_redisredis.StringCmd
	Incr_                       func(key string) *go_redisredis.IntCmd
	IncrBy_                     func(key string, value int64) *go_redisredis.IntCmd
	IncrByFloat_                func(key string, value float64) *go_redisredis.FloatCmd
	MGet_                       func(keys ...string) *go_redisredis.SliceCmd
	MSet_                       func(pairs ...interface{}) *go_redisredis.StatusCmd
	MSetNX_                     func(pairs ...interface{}) *go_redisredis.BoolCmd
	Set_                        func(key string, value interface{}, expiration timex.Duration) *go_redisredis.StatusCmd
	SetBit_                     func(key string, offset int64, value int) *go_redisredis.IntCmd
	SetNX_                      func(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd
	SetXX_                      func(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd
	SetRange_                   func(key string, offset int64, value string) *go_redisredis.IntCmd
	StrLen_                     func(key string) *go_redisredis.IntCmd
	HDel_                       func(key string, fields ...string) *go_redisredis.IntCmd
	HExists_                    func(key, field string) *go_redisredis.BoolCmd
	HGet_                       func(key, field string) *go_redisredis.StringCmd
	HGetAll_                    func(key string) *go_redisredis.StringStringMapCmd
	HIncrBy_                    func(key, field string, incr int64) *go_redisredis.IntCmd
	HIncrByFloat_               func(key, field string, incr float64) *go_redisredis.FloatCmd
	HKeys_                      func(key string) *go_redisredis.StringSliceCmd
	HLen_                       func(key string) *go_redisredis.IntCmd
	HMGet_                      func(key string, fields ...string) *go_redisredis.SliceCmd
	HMSet_                      func(key string, fields map[string]interface{}) *go_redisredis.StatusCmd
	HSet_                       func(key, field string, value interface{}) *go_redisredis.BoolCmd
	HSetNX_                     func(key, field string, value interface{}) *go_redisredis.BoolCmd
	HVals_                      func(key string) *go_redisredis.StringSliceCmd
	BLPop_                      func(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd
	BRPop_                      func(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd
	BRPopLPush_                 func(source, destination string, timeout timex.Duration) *go_redisredis.StringCmd
	LIndex_                     func(key string, index int64) *go_redisredis.StringCmd
	LInsert_                    func(key, op string, pivot, value interface{}) *go_redisredis.IntCmd
	LInsertBefore_              func(key string, pivot, value interface{}) *go_redisredis.IntCmd
	LInsertAfter_               func(key string, pivot, value interface{}) *go_redisredis.IntCmd
	LLen_                       func(key string) *go_redisredis.IntCmd
	LPop_                       func(key string) *go_redisredis.StringCmd
	LPush_                      func(key string, values ...interface{}) *go_redisredis.IntCmd
	LPushX_                     func(key string, value interface{}) *go_redisredis.IntCmd
	LRange_                     func(key string, start, stop int64) *go_redisredis.StringSliceCmd
	LRem_                       func(key string, count int64, value interface{}) *go_redisredis.IntCmd
	LSet_                       func(key string, index int64, value interface{}) *go_redisredis.StatusCmd
	LTrim_                      func(key string, start, stop int64) *go_redisredis.StatusCmd
	RPop_                       func(key string) *go_redisredis.StringCmd
	RPopLPush_                  func(source, destination string) *go_redisredis.StringCmd
	RPush_                      func(key string, values ...interface{}) *go_redisredis.IntCmd
	RPushX_                     func(key string, value interface{}) *go_redisredis.IntCmd
	SAdd_                       func(key string, members ...interface{}) *go_redisredis.IntCmd
	SCard_                      func(key string) *go_redisredis.IntCmd
	SDiff_                      func(keys ...string) *go_redisredis.StringSliceCmd
	SDiffStore_                 func(destination string, keys ...string) *go_redisredis.IntCmd
	SInter_                     func(keys ...string) *go_redisredis.StringSliceCmd
	SInterStore_                func(destination string, keys ...string) *go_redisredis.IntCmd
	SIsMember_                  func(key string, member interface{}) *go_redisredis.BoolCmd
	SMembers_                   func(key string) *go_redisredis.StringSliceCmd
	SMembersMap_                func(key string) *go_redisredis.StringStructMapCmd
	SMove_                      func(source, destination string, member interface{}) *go_redisredis.BoolCmd
	SPop_                       func(key string) *go_redisredis.StringCmd
	SPopN_                      func(key string, count int64) *go_redisredis.StringSliceCmd
	SRandMember_                func(key string) *go_redisredis.StringCmd
	SRandMemberN_               func(key string, count int64) *go_redisredis.StringSliceCmd
	SRem_                       func(key string, members ...interface{}) *go_redisredis.IntCmd
	SUnion_                     func(keys ...string) *go_redisredis.StringSliceCmd
	SUnionStore_                func(destination string, keys ...string) *go_redisredis.IntCmd
	XAdd_                       func(a *go_redisredis.XAddArgs) *go_redisredis.StringCmd
	XDel_                       func(stream string, ids ...string) *go_redisredis.IntCmd
	XLen_                       func(stream string) *go_redisredis.IntCmd
	XRange_                     func(stream, start, stop string) *go_redisredis.XMessageSliceCmd
	XRangeN_                    func(stream, start, stop string, count int64) *go_redisredis.XMessageSliceCmd
	XRevRange_                  func(stream string, start, stop string) *go_redisredis.XMessageSliceCmd
	XRevRangeN_                 func(stream string, start, stop string, count int64) *go_redisredis.XMessageSliceCmd
	XRead_                      func(a *go_redisredis.XReadArgs) *go_redisredis.XStreamSliceCmd
	XReadStreams_               func(streams ...string) *go_redisredis.XStreamSliceCmd
	XGroupCreate_               func(stream, group, start string) *go_redisredis.StatusCmd
	XGroupCreateMkStream_       func(stream, group, start string) *go_redisredis.StatusCmd
	XGroupSetID_                func(stream, group, start string) *go_redisredis.StatusCmd
	XGroupDestroy_              func(stream, group string) *go_redisredis.IntCmd
	XGroupDelConsumer_          func(stream, group, consumer string) *go_redisredis.IntCmd
	XReadGroup_                 func(a *go_redisredis.XReadGroupArgs) *go_redisredis.XStreamSliceCmd
	XAck_                       func(stream, group string, ids ...string) *go_redisredis.IntCmd
	XPending_                   func(stream, group string) *go_redisredis.XPendingCmd
	XPendingExt_                func(a *go_redisredis.XPendingExtArgs) *go_redisredis.XPendingExtCmd
	XClaim_                     func(a *go_redisredis.XClaimArgs) *go_redisredis.XMessageSliceCmd
	XClaimJustID_               func(a *go_redisredis.XClaimArgs) *go_redisredis.StringSliceCmd
	XTrim_                      func(key string, maxLen int64) *go_redisredis.IntCmd
	XTrimApprox_                func(key string, maxLen int64) *go_redisredis.IntCmd
	BZPopMax_                   func(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd
	BZPopMin_                   func(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd
	ZAdd_                       func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddNX_                     func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddXX_                     func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddCh_                     func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddNXCh_                   func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddXXCh_                   func(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZIncr_                      func(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZIncrNX_                    func(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZIncrXX_                    func(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZCard_                      func(key string) *go_redisredis.IntCmd
	ZCount_                     func(key, min, max string) *go_redisredis.IntCmd
	ZLexCount_                  func(key, min, max string) *go_redisredis.IntCmd
	ZIncrBy_                    func(key string, increment float64, member string) *go_redisredis.FloatCmd
	ZInterStore_                func(destination string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd
	ZPopMax_                    func(key string, count ...int64) *go_redisredis.ZSliceCmd
	ZPopMin_                    func(key string, count ...int64) *go_redisredis.ZSliceCmd
	ZRange_                     func(key string, start, stop int64) *go_redisredis.StringSliceCmd
	ZRangeWithScores_           func(key string, start, stop int64) *go_redisredis.ZSliceCmd
	ZRangeByScore_              func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRangeByLex_                func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRangeByScoreWithScores_    func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd
	ZRank_                      func(key, member string) *go_redisredis.IntCmd
	ZRem_                       func(key string, members ...interface{}) *go_redisredis.IntCmd
	ZRemRangeByRank_            func(key string, start, stop int64) *go_redisredis.IntCmd
	ZRemRangeByScore_           func(key, min, max string) *go_redisredis.IntCmd
	ZRemRangeByLex_             func(key, min, max string) *go_redisredis.IntCmd
	ZRevRange_                  func(key string, start, stop int64) *go_redisredis.StringSliceCmd
	ZRevRangeWithScores_        func(key string, start, stop int64) *go_redisredis.ZSliceCmd
	ZRevRangeByScore_           func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRevRangeByLex_             func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRevRangeByScoreWithScores_ func(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd
	ZRevRank_                   func(key, member string) *go_redisredis.IntCmd
	ZScore_                     func(key, member string) *go_redisredis.FloatCmd
	ZUnionStore_                func(dest string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd
	PFAdd_                      func(key string, els ...interface{}) *go_redisredis.IntCmd
	PFCount_                    func(keys ...string) *go_redisredis.IntCmd
	PFMerge_                    func(dest string, keys ...string) *go_redisredis.StatusCmd
	BgRewriteAOF_               func() *go_redisredis.StatusCmd
	BgSave_                     func() *go_redisredis.StatusCmd
	ClientKill_                 func(ipPort string) *go_redisredis.StatusCmd
	ClientKillByFilter_         func(keys ...string) *go_redisredis.IntCmd
	ClientList_                 func() *go_redisredis.StringCmd
	ClientPause_                func(dur timex.Duration) *go_redisredis.BoolCmd
	ClientID_                   func() *go_redisredis.IntCmd
	ConfigGet_                  func(parameter string) *go_redisredis.SliceCmd
	ConfigResetStat_            func() *go_redisredis.StatusCmd
	ConfigSet_                  func(parameter, value string) *go_redisredis.StatusCmd
	ConfigRewrite_              func() *go_redisredis.StatusCmd
	DBSize_                     func() *go_redisredis.IntCmd
	FlushAll_                   func() *go_redisredis.StatusCmd
	FlushAllAsync_              func() *go_redisredis.StatusCmd
	FlushDB_                    func() *go_redisredis.StatusCmd
	FlushDBAsync_               func() *go_redisredis.StatusCmd
	Info_                       func(section ...string) *go_redisredis.StringCmd
	LastSave_                   func() *go_redisredis.IntCmd
	Save_                       func() *go_redisredis.StatusCmd
	Shutdown_                   func() *go_redisredis.StatusCmd
	ShutdownSave_               func() *go_redisredis.StatusCmd
	ShutdownNoSave_             func() *go_redisredis.StatusCmd
	SlaveOf_                    func(host, port string) *go_redisredis.StatusCmd
	Time_                       func() *go_redisredis.TimeCmd
	Eval_                       func(script string, keys []string, args ...interface{}) *go_redisredis.Cmd
	EvalSha_                    func(sha1 string, keys []string, args ...interface{}) *go_redisredis.Cmd
	ScriptExists_               func(hashes ...string) *go_redisredis.BoolSliceCmd
	ScriptFlush_                func() *go_redisredis.StatusCmd
	ScriptKill_                 func() *go_redisredis.StatusCmd
	ScriptLoad_                 func(script string) *go_redisredis.StringCmd
	DebugObject_                func(key string) *go_redisredis.StringCmd
	Publish_                    func(channel string, message interface{}) *go_redisredis.IntCmd
	PubSubChannels_             func(pattern string) *go_redisredis.StringSliceCmd
	PubSubNumSub_               func(channels ...string) *go_redisredis.StringIntMapCmd
	PubSubNumPat_               func() *go_redisredis.IntCmd
	ClusterSlots_               func() *go_redisredis.ClusterSlotsCmd
	ClusterNodes_               func() *go_redisredis.StringCmd
	ClusterMeet_                func(host, port string) *go_redisredis.StatusCmd
	ClusterForget_              func(nodeID string) *go_redisredis.StatusCmd
	ClusterReplicate_           func(nodeID string) *go_redisredis.StatusCmd
	ClusterResetSoft_           func() *go_redisredis.StatusCmd
	ClusterResetHard_           func() *go_redisredis.StatusCmd
	ClusterInfo_                func() *go_redisredis.StringCmd
	ClusterKeySlot_             func(key string) *go_redisredis.IntCmd
	ClusterGetKeysInSlot_       func(slot int, count int) *go_redisredis.StringSliceCmd
	ClusterCountFailureReports_ func(nodeID string) *go_redisredis.IntCmd
	ClusterCountKeysInSlot_     func(slot int) *go_redisredis.IntCmd
	ClusterDelSlots_            func(slots ...int) *go_redisredis.StatusCmd
	ClusterDelSlotsRange_       func(min, max int) *go_redisredis.StatusCmd
	ClusterSaveConfig_          func() *go_redisredis.StatusCmd
	ClusterSlaves_              func(nodeID string) *go_redisredis.StringSliceCmd
	ClusterFailover_            func() *go_redisredis.StatusCmd
	ClusterAddSlots_            func(slots ...int) *go_redisredis.StatusCmd
	ClusterAddSlotsRange_       func(min, max int) *go_redisredis.StatusCmd
	GeoAdd_                     func(key string, geoLocation ...*go_redisredis.GeoLocation) *go_redisredis.IntCmd
	GeoPos_                     func(key string, members ...string) *go_redisredis.GeoPosCmd
	GeoRadius_                  func(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusRO_                func(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusByMember_          func(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusByMemberRO_        func(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoDist_                    func(key string, member1, member2, unit string) *go_redisredis.FloatCmd
	GeoHash_                    func(key string, members ...string) *go_redisredis.StringSliceCmd
	ReadOnly_                   func() *go_redisredis.StatusCmd
	ReadWrite_                  func() *go_redisredis.StatusCmd
	MemoryUsage_                func(key string, samples ...int) *go_redisredis.IntCmd
	Context_                    func() contextx.Context
	WithContext_                func(ctx contextx.Context) RedisIOCInterface
	Options_                    func() *go_redisredis.Options
	SetLimiter_                 func(l go_redisredis.Limiter) RedisIOCInterface
	PoolStats_                  func() *go_redisredis.PoolStats
	Pipelined_                  func(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error)
	Pipeline_                   func() go_redisredis.Pipeliner
	TxPipelined_                func(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error)
	TxPipeline_                 func() go_redisredis.Pipeliner
	Subscribe_                  func(channels ...string) *go_redisredis.PubSub
	PSubscribe_                 func(channels ...string) *go_redisredis.PubSub
}

func (r *redis_) Command() *go_redisredis.CommandsInfoCmd {
	return r.Command_()
}

func (r *redis_) ClientGetName() *go_redisredis.StringCmd {
	return r.ClientGetName_()
}

func (r *redis_) Echo(message interface{}) *go_redisredis.StringCmd {
	return r.Echo_(message)
}

func (r *redis_) Ping() *go_redisredis.StatusCmd {
	return r.Ping_()
}

func (r *redis_) Quit() *go_redisredis.StatusCmd {
	return r.Quit_()
}

func (r *redis_) Del(keys ...string) *go_redisredis.IntCmd {
	return r.Del_(keys...)
}

func (r *redis_) Unlink(keys ...string) *go_redisredis.IntCmd {
	return r.Unlink_(keys...)
}

func (r *redis_) Dump(key string) *go_redisredis.StringCmd {
	return r.Dump_(key)
}

func (r *redis_) Exists(keys ...string) *go_redisredis.IntCmd {
	return r.Exists_(keys...)
}

func (r *redis_) Expire(key string, expiration timex.Duration) *go_redisredis.BoolCmd {
	return r.Expire_(key, expiration)
}

func (r *redis_) ExpireAt(key string, tm timex.Time) *go_redisredis.BoolCmd {
	return r.ExpireAt_(key, tm)
}

func (r *redis_) Keys(pattern string) *go_redisredis.StringSliceCmd {
	return r.Keys_(pattern)
}

func (r *redis_) Migrate(host, port, key string, db int64, timeout timex.Duration) *go_redisredis.StatusCmd {
	return r.Migrate_(host, port, key, db, timeout)
}

func (r *redis_) Move(key string, db int64) *go_redisredis.BoolCmd {
	return r.Move_(key, db)
}

func (r *redis_) ObjectRefCount(key string) *go_redisredis.IntCmd {
	return r.ObjectRefCount_(key)
}

func (r *redis_) ObjectEncoding(key string) *go_redisredis.StringCmd {
	return r.ObjectEncoding_(key)
}

func (r *redis_) ObjectIdleTime(key string) *go_redisredis.DurationCmd {
	return r.ObjectIdleTime_(key)
}

func (r *redis_) Persist(key string) *go_redisredis.BoolCmd {
	return r.Persist_(key)
}

func (r *redis_) PExpire(key string, expiration timex.Duration) *go_redisredis.BoolCmd {
	return r.PExpire_(key, expiration)
}

func (r *redis_) PExpireAt(key string, tm timex.Time) *go_redisredis.BoolCmd {
	return r.PExpireAt_(key, tm)
}

func (r *redis_) PTTL(key string) *go_redisredis.DurationCmd {
	return r.PTTL_(key)
}

func (r *redis_) RandomKey() *go_redisredis.StringCmd {
	return r.RandomKey_()
}

func (r *redis_) Rename(key, newkey string) *go_redisredis.StatusCmd {
	return r.Rename_(key, newkey)
}

func (r *redis_) RenameNX(key, newkey string) *go_redisredis.BoolCmd {
	return r.RenameNX_(key, newkey)
}

func (r *redis_) Restore(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd {
	return r.Restore_(key, ttl, value)
}

func (r *redis_) RestoreReplace(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd {
	return r.RestoreReplace_(key, ttl, value)
}

func (r *redis_) Sort(key string, sort *go_redisredis.Sort) *go_redisredis.StringSliceCmd {
	return r.Sort_(key, sort)
}

func (r *redis_) SortStore(key, store string, sort *go_redisredis.Sort) *go_redisredis.IntCmd {
	return r.SortStore_(key, store, sort)
}

func (r *redis_) SortInterfaces(key string, sort *go_redisredis.Sort) *go_redisredis.SliceCmd {
	return r.SortInterfaces_(key, sort)
}

func (r *redis_) Touch(keys ...string) *go_redisredis.IntCmd {
	return r.Touch_(keys...)
}

func (r *redis_) TTL(key string) *go_redisredis.DurationCmd {
	return r.TTL_(key)
}

func (r *redis_) Type(key string) *go_redisredis.StatusCmd {
	return r.Type_(key)
}

func (r *redis_) Scan(cursor uint64, match string, count int64) *go_redisredis.ScanCmd {
	return r.Scan_(cursor, match, count)
}

func (r *redis_) SScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd {
	return r.SScan_(key, cursor, match, count)
}

func (r *redis_) HScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd {
	return r.HScan_(key, cursor, match, count)
}

func (r *redis_) ZScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd {
	return r.ZScan_(key, cursor, match, count)
}

func (r *redis_) Append(key, value string) *go_redisredis.IntCmd {
	return r.Append_(key, value)
}

func (r *redis_) BitCount(key string, bitCount *go_redisredis.BitCount) *go_redisredis.IntCmd {
	return r.BitCount_(key, bitCount)
}

func (r *redis_) BitOpAnd(destKey string, keys ...string) *go_redisredis.IntCmd {
	return r.BitOpAnd_(destKey, keys...)
}

func (r *redis_) BitOpOr(destKey string, keys ...string) *go_redisredis.IntCmd {
	return r.BitOpOr_(destKey, keys...)
}

func (r *redis_) BitOpXor(destKey string, keys ...string) *go_redisredis.IntCmd {
	return r.BitOpXor_(destKey, keys...)
}

func (r *redis_) BitOpNot(destKey string, key string) *go_redisredis.IntCmd {
	return r.BitOpNot_(destKey, key)
}

func (r *redis_) BitPos(key string, bit int64, pos ...int64) *go_redisredis.IntCmd {
	return r.BitPos_(key, bit, pos...)
}

func (r *redis_) Decr(key string) *go_redisredis.IntCmd {
	return r.Decr_(key)
}

func (r *redis_) DecrBy(key string, decrement int64) *go_redisredis.IntCmd {
	return r.DecrBy_(key, decrement)
}

func (r *redis_) Get(key string) *go_redisredis.StringCmd {
	return r.Get_(key)
}

func (r *redis_) GetBit(key string, offset int64) *go_redisredis.IntCmd {
	return r.GetBit_(key, offset)
}

func (r *redis_) GetRange(key string, start, end int64) *go_redisredis.StringCmd {
	return r.GetRange_(key, start, end)
}

func (r *redis_) GetSet(key string, value interface{}) *go_redisredis.StringCmd {
	return r.GetSet_(key, value)
}

func (r *redis_) Incr(key string) *go_redisredis.IntCmd {
	return r.Incr_(key)
}

func (r *redis_) IncrBy(key string, value int64) *go_redisredis.IntCmd {
	return r.IncrBy_(key, value)
}

func (r *redis_) IncrByFloat(key string, value float64) *go_redisredis.FloatCmd {
	return r.IncrByFloat_(key, value)
}

func (r *redis_) MGet(keys ...string) *go_redisredis.SliceCmd {
	return r.MGet_(keys...)
}

func (r *redis_) MSet(pairs ...interface{}) *go_redisredis.StatusCmd {
	return r.MSet_(pairs...)
}

func (r *redis_) MSetNX(pairs ...interface{}) *go_redisredis.BoolCmd {
	return r.MSetNX_(pairs...)
}

func (r *redis_) Set(key string, value interface{}, expiration timex.Duration) *go_redisredis.StatusCmd {
	return r.Set_(key, value, expiration)
}

func (r *redis_) SetBit(key string, offset int64, value int) *go_redisredis.IntCmd {
	return r.SetBit_(key, offset, value)
}

func (r *redis_) SetNX(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd {
	return r.SetNX_(key, value, expiration)
}

func (r *redis_) SetXX(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd {
	return r.SetXX_(key, value, expiration)
}

func (r *redis_) SetRange(key string, offset int64, value string) *go_redisredis.IntCmd {
	return r.SetRange_(key, offset, value)
}

func (r *redis_) StrLen(key string) *go_redisredis.IntCmd {
	return r.StrLen_(key)
}

func (r *redis_) HDel(key string, fields ...string) *go_redisredis.IntCmd {
	return r.HDel_(key, fields...)
}

func (r *redis_) HExists(key, field string) *go_redisredis.BoolCmd {
	return r.HExists_(key, field)
}

func (r *redis_) HGet(key, field string) *go_redisredis.StringCmd {
	return r.HGet_(key, field)
}

func (r *redis_) HGetAll(key string) *go_redisredis.StringStringMapCmd {
	return r.HGetAll_(key)
}

func (r *redis_) HIncrBy(key, field string, incr int64) *go_redisredis.IntCmd {
	return r.HIncrBy_(key, field, incr)
}

func (r *redis_) HIncrByFloat(key, field string, incr float64) *go_redisredis.FloatCmd {
	return r.HIncrByFloat_(key, field, incr)
}

func (r *redis_) HKeys(key string) *go_redisredis.StringSliceCmd {
	return r.HKeys_(key)
}

func (r *redis_) HLen(key string) *go_redisredis.IntCmd {
	return r.HLen_(key)
}

func (r *redis_) HMGet(key string, fields ...string) *go_redisredis.SliceCmd {
	return r.HMGet_(key, fields...)
}

func (r *redis_) HMSet(key string, fields map[string]interface{}) *go_redisredis.StatusCmd {
	return r.HMSet_(key, fields)
}

func (r *redis_) HSet(key, field string, value interface{}) *go_redisredis.BoolCmd {
	return r.HSet_(key, field, value)
}

func (r *redis_) HSetNX(key, field string, value interface{}) *go_redisredis.BoolCmd {
	return r.HSetNX_(key, field, value)
}

func (r *redis_) HVals(key string) *go_redisredis.StringSliceCmd {
	return r.HVals_(key)
}

func (r *redis_) BLPop(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd {
	return r.BLPop_(timeout, keys...)
}

func (r *redis_) BRPop(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd {
	return r.BRPop_(timeout, keys...)
}

func (r *redis_) BRPopLPush(source, destination string, timeout timex.Duration) *go_redisredis.StringCmd {
	return r.BRPopLPush_(source, destination, timeout)
}

func (r *redis_) LIndex(key string, index int64) *go_redisredis.StringCmd {
	return r.LIndex_(key, index)
}

func (r *redis_) LInsert(key, op string, pivot, value interface{}) *go_redisredis.IntCmd {
	return r.LInsert_(key, op, pivot, value)
}

func (r *redis_) LInsertBefore(key string, pivot, value interface{}) *go_redisredis.IntCmd {
	return r.LInsertBefore_(key, pivot, value)
}

func (r *redis_) LInsertAfter(key string, pivot, value interface{}) *go_redisredis.IntCmd {
	return r.LInsertAfter_(key, pivot, value)
}

func (r *redis_) LLen(key string) *go_redisredis.IntCmd {
	return r.LLen_(key)
}

func (r *redis_) LPop(key string) *go_redisredis.StringCmd {
	return r.LPop_(key)
}

func (r *redis_) LPush(key string, values ...interface{}) *go_redisredis.IntCmd {
	return r.LPush_(key, values...)
}

func (r *redis_) LPushX(key string, value interface{}) *go_redisredis.IntCmd {
	return r.LPushX_(key, value)
}

func (r *redis_) LRange(key string, start, stop int64) *go_redisredis.StringSliceCmd {
	return r.LRange_(key, start, stop)
}

func (r *redis_) LRem(key string, count int64, value interface{}) *go_redisredis.IntCmd {
	return r.LRem_(key, count, value)
}

func (r *redis_) LSet(key string, index int64, value interface{}) *go_redisredis.StatusCmd {
	return r.LSet_(key, index, value)
}

func (r *redis_) LTrim(key string, start, stop int64) *go_redisredis.StatusCmd {
	return r.LTrim_(key, start, stop)
}

func (r *redis_) RPop(key string) *go_redisredis.StringCmd {
	return r.RPop_(key)
}

func (r *redis_) RPopLPush(source, destination string) *go_redisredis.StringCmd {
	return r.RPopLPush_(source, destination)
}

func (r *redis_) RPush(key string, values ...interface{}) *go_redisredis.IntCmd {
	return r.RPush_(key, values...)
}

func (r *redis_) RPushX(key string, value interface{}) *go_redisredis.IntCmd {
	return r.RPushX_(key, value)
}

func (r *redis_) SAdd(key string, members ...interface{}) *go_redisredis.IntCmd {
	return r.SAdd_(key, members...)
}

func (r *redis_) SCard(key string) *go_redisredis.IntCmd {
	return r.SCard_(key)
}

func (r *redis_) SDiff(keys ...string) *go_redisredis.StringSliceCmd {
	return r.SDiff_(keys...)
}

func (r *redis_) SDiffStore(destination string, keys ...string) *go_redisredis.IntCmd {
	return r.SDiffStore_(destination, keys...)
}

func (r *redis_) SInter(keys ...string) *go_redisredis.StringSliceCmd {
	return r.SInter_(keys...)
}

func (r *redis_) SInterStore(destination string, keys ...string) *go_redisredis.IntCmd {
	return r.SInterStore_(destination, keys...)
}

func (r *redis_) SIsMember(key string, member interface{}) *go_redisredis.BoolCmd {
	return r.SIsMember_(key, member)
}

func (r *redis_) SMembers(key string) *go_redisredis.StringSliceCmd {
	return r.SMembers_(key)
}

func (r *redis_) SMembersMap(key string) *go_redisredis.StringStructMapCmd {
	return r.SMembersMap_(key)
}

func (r *redis_) SMove(source, destination string, member interface{}) *go_redisredis.BoolCmd {
	return r.SMove_(source, destination, member)
}

func (r *redis_) SPop(key string) *go_redisredis.StringCmd {
	return r.SPop_(key)
}

func (r *redis_) SPopN(key string, count int64) *go_redisredis.StringSliceCmd {
	return r.SPopN_(key, count)
}

func (r *redis_) SRandMember(key string) *go_redisredis.StringCmd {
	return r.SRandMember_(key)
}

func (r *redis_) SRandMemberN(key string, count int64) *go_redisredis.StringSliceCmd {
	return r.SRandMemberN_(key, count)
}

func (r *redis_) SRem(key string, members ...interface{}) *go_redisredis.IntCmd {
	return r.SRem_(key, members...)
}

func (r *redis_) SUnion(keys ...string) *go_redisredis.StringSliceCmd {
	return r.SUnion_(keys...)
}

func (r *redis_) SUnionStore(destination string, keys ...string) *go_redisredis.IntCmd {
	return r.SUnionStore_(destination, keys...)
}

func (r *redis_) XAdd(a *go_redisredis.XAddArgs) *go_redisredis.StringCmd {
	return r.XAdd_(a)
}

func (r *redis_) XDel(stream string, ids ...string) *go_redisredis.IntCmd {
	return r.XDel_(stream, ids...)
}

func (r *redis_) XLen(stream string) *go_redisredis.IntCmd {
	return r.XLen_(stream)
}

func (r *redis_) XRange(stream, start, stop string) *go_redisredis.XMessageSliceCmd {
	return r.XRange_(stream, start, stop)
}

func (r *redis_) XRangeN(stream, start, stop string, count int64) *go_redisredis.XMessageSliceCmd {
	return r.XRangeN_(stream, start, stop, count)
}

func (r *redis_) XRevRange(stream string, start, stop string) *go_redisredis.XMessageSliceCmd {
	return r.XRevRange_(stream, start, stop)
}

func (r *redis_) XRevRangeN(stream string, start, stop string, count int64) *go_redisredis.XMessageSliceCmd {
	return r.XRevRangeN_(stream, start, stop, count)
}

func (r *redis_) XRead(a *go_redisredis.XReadArgs) *go_redisredis.XStreamSliceCmd {
	return r.XRead_(a)
}

func (r *redis_) XReadStreams(streams ...string) *go_redisredis.XStreamSliceCmd {
	return r.XReadStreams_(streams...)
}

func (r *redis_) XGroupCreate(stream, group, start string) *go_redisredis.StatusCmd {
	return r.XGroupCreate_(stream, group, start)
}

func (r *redis_) XGroupCreateMkStream(stream, group, start string) *go_redisredis.StatusCmd {
	return r.XGroupCreateMkStream_(stream, group, start)
}

func (r *redis_) XGroupSetID(stream, group, start string) *go_redisredis.StatusCmd {
	return r.XGroupSetID_(stream, group, start)
}

func (r *redis_) XGroupDestroy(stream, group string) *go_redisredis.IntCmd {
	return r.XGroupDestroy_(stream, group)
}

func (r *redis_) XGroupDelConsumer(stream, group, consumer string) *go_redisredis.IntCmd {
	return r.XGroupDelConsumer_(stream, group, consumer)
}

func (r *redis_) XReadGroup(a *go_redisredis.XReadGroupArgs) *go_redisredis.XStreamSliceCmd {
	return r.XReadGroup_(a)
}

func (r *redis_) XAck(stream, group string, ids ...string) *go_redisredis.IntCmd {
	return r.XAck_(stream, group, ids...)
}

func (r *redis_) XPending(stream, group string) *go_redisredis.XPendingCmd {
	return r.XPending_(stream, group)
}

func (r *redis_) XPendingExt(a *go_redisredis.XPendingExtArgs) *go_redisredis.XPendingExtCmd {
	return r.XPendingExt_(a)
}

func (r *redis_) XClaim(a *go_redisredis.XClaimArgs) *go_redisredis.XMessageSliceCmd {
	return r.XClaim_(a)
}

func (r *redis_) XClaimJustID(a *go_redisredis.XClaimArgs) *go_redisredis.StringSliceCmd {
	return r.XClaimJustID_(a)
}

func (r *redis_) XTrim(key string, maxLen int64) *go_redisredis.IntCmd {
	return r.XTrim_(key, maxLen)
}

func (r *redis_) XTrimApprox(key string, maxLen int64) *go_redisredis.IntCmd {
	return r.XTrimApprox_(key, maxLen)
}

func (r *redis_) BZPopMax(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd {
	return r.BZPopMax_(timeout, keys...)
}

func (r *redis_) BZPopMin(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd {
	return r.BZPopMin_(timeout, keys...)
}

func (r *redis_) ZAdd(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAdd_(key, members...)
}

func (r *redis_) ZAddNX(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAddNX_(key, members...)
}

func (r *redis_) ZAddXX(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAddXX_(key, members...)
}

func (r *redis_) ZAddCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAddCh_(key, members...)
}

func (r *redis_) ZAddNXCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAddNXCh_(key, members...)
}

func (r *redis_) ZAddXXCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd {
	return r.ZAddXXCh_(key, members...)
}

func (r *redis_) ZIncr(key string, member go_redisredis.Z) *go_redisredis.FloatCmd {
	return r.ZIncr_(key, member)
}

func (r *redis_) ZIncrNX(key string, member go_redisredis.Z) *go_redisredis.FloatCmd {
	return r.ZIncrNX_(key, member)
}

func (r *redis_) ZIncrXX(key string, member go_redisredis.Z) *go_redisredis.FloatCmd {
	return r.ZIncrXX_(key, member)
}

func (r *redis_) ZCard(key string) *go_redisredis.IntCmd {
	return r.ZCard_(key)
}

func (r *redis_) ZCount(key, min, max string) *go_redisredis.IntCmd {
	return r.ZCount_(key, min, max)
}

func (r *redis_) ZLexCount(key, min, max string) *go_redisredis.IntCmd {
	return r.ZLexCount_(key, min, max)
}

func (r *redis_) ZIncrBy(key string, increment float64, member string) *go_redisredis.FloatCmd {
	return r.ZIncrBy_(key, increment, member)
}

func (r *redis_) ZInterStore(destination string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd {
	return r.ZInterStore_(destination, store, keys...)
}

func (r *redis_) ZPopMax(key string, count ...int64) *go_redisredis.ZSliceCmd {
	return r.ZPopMax_(key, count...)
}

func (r *redis_) ZPopMin(key string, count ...int64) *go_redisredis.ZSliceCmd {
	return r.ZPopMin_(key, count...)
}

func (r *redis_) ZRange(key string, start, stop int64) *go_redisredis.StringSliceCmd {
	return r.ZRange_(key, start, stop)
}

func (r *redis_) ZRangeWithScores(key string, start, stop int64) *go_redisredis.ZSliceCmd {
	return r.ZRangeWithScores_(key, start, stop)
}

func (r *redis_) ZRangeByScore(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd {
	return r.ZRangeByScore_(key, opt)
}

func (r *redis_) ZRangeByLex(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd {
	return r.ZRangeByLex_(key, opt)
}

func (r *redis_) ZRangeByScoreWithScores(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd {
	return r.ZRangeByScoreWithScores_(key, opt)
}

func (r *redis_) ZRank(key, member string) *go_redisredis.IntCmd {
	return r.ZRank_(key, member)
}

func (r *redis_) ZRem(key string, members ...interface{}) *go_redisredis.IntCmd {
	return r.ZRem_(key, members...)
}

func (r *redis_) ZRemRangeByRank(key string, start, stop int64) *go_redisredis.IntCmd {
	return r.ZRemRangeByRank_(key, start, stop)
}

func (r *redis_) ZRemRangeByScore(key, min, max string) *go_redisredis.IntCmd {
	return r.ZRemRangeByScore_(key, min, max)
}

func (r *redis_) ZRemRangeByLex(key, min, max string) *go_redisredis.IntCmd {
	return r.ZRemRangeByLex_(key, min, max)
}

func (r *redis_) ZRevRange(key string, start, stop int64) *go_redisredis.StringSliceCmd {
	return r.ZRevRange_(key, start, stop)
}

func (r *redis_) ZRevRangeWithScores(key string, start, stop int64) *go_redisredis.ZSliceCmd {
	return r.ZRevRangeWithScores_(key, start, stop)
}

func (r *redis_) ZRevRangeByScore(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd {
	return r.ZRevRangeByScore_(key, opt)
}

func (r *redis_) ZRevRangeByLex(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd {
	return r.ZRevRangeByLex_(key, opt)
}

func (r *redis_) ZRevRangeByScoreWithScores(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd {
	return r.ZRevRangeByScoreWithScores_(key, opt)
}

func (r *redis_) ZRevRank(key, member string) *go_redisredis.IntCmd {
	return r.ZRevRank_(key, member)
}

func (r *redis_) ZScore(key, member string) *go_redisredis.FloatCmd {
	return r.ZScore_(key, member)
}

func (r *redis_) ZUnionStore(dest string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd {
	return r.ZUnionStore_(dest, store, keys...)
}

func (r *redis_) PFAdd(key string, els ...interface{}) *go_redisredis.IntCmd {
	return r.PFAdd_(key, els...)
}

func (r *redis_) PFCount(keys ...string) *go_redisredis.IntCmd {
	return r.PFCount_(keys...)
}

func (r *redis_) PFMerge(dest string, keys ...string) *go_redisredis.StatusCmd {
	return r.PFMerge_(dest, keys...)
}

func (r *redis_) BgRewriteAOF() *go_redisredis.StatusCmd {
	return r.BgRewriteAOF_()
}

func (r *redis_) BgSave() *go_redisredis.StatusCmd {
	return r.BgSave_()
}

func (r *redis_) ClientKill(ipPort string) *go_redisredis.StatusCmd {
	return r.ClientKill_(ipPort)
}

func (r *redis_) ClientKillByFilter(keys ...string) *go_redisredis.IntCmd {
	return r.ClientKillByFilter_(keys...)
}

func (r *redis_) ClientList() *go_redisredis.StringCmd {
	return r.ClientList_()
}

func (r *redis_) ClientPause(dur timex.Duration) *go_redisredis.BoolCmd {
	return r.ClientPause_(dur)
}

func (r *redis_) ClientID() *go_redisredis.IntCmd {
	return r.ClientID_()
}

func (r *redis_) ConfigGet(parameter string) *go_redisredis.SliceCmd {
	return r.ConfigGet_(parameter)
}

func (r *redis_) ConfigResetStat() *go_redisredis.StatusCmd {
	return r.ConfigResetStat_()
}

func (r *redis_) ConfigSet(parameter, value string) *go_redisredis.StatusCmd {
	return r.ConfigSet_(parameter, value)
}

func (r *redis_) ConfigRewrite() *go_redisredis.StatusCmd {
	return r.ConfigRewrite_()
}

func (r *redis_) DBSize() *go_redisredis.IntCmd {
	return r.DBSize_()
}

func (r *redis_) FlushAll() *go_redisredis.StatusCmd {
	return r.FlushAll_()
}

func (r *redis_) FlushAllAsync() *go_redisredis.StatusCmd {
	return r.FlushAllAsync_()
}

func (r *redis_) FlushDB() *go_redisredis.StatusCmd {
	return r.FlushDB_()
}

func (r *redis_) FlushDBAsync() *go_redisredis.StatusCmd {
	return r.FlushDBAsync_()
}

func (r *redis_) Info(section ...string) *go_redisredis.StringCmd {
	return r.Info_(section...)
}

func (r *redis_) LastSave() *go_redisredis.IntCmd {
	return r.LastSave_()
}

func (r *redis_) Save() *go_redisredis.StatusCmd {
	return r.Save_()
}

func (r *redis_) Shutdown() *go_redisredis.StatusCmd {
	return r.Shutdown_()
}

func (r *redis_) ShutdownSave() *go_redisredis.StatusCmd {
	return r.ShutdownSave_()
}

func (r *redis_) ShutdownNoSave() *go_redisredis.StatusCmd {
	return r.ShutdownNoSave_()
}

func (r *redis_) SlaveOf(host, port string) *go_redisredis.StatusCmd {
	return r.SlaveOf_(host, port)
}

func (r *redis_) Time() *go_redisredis.TimeCmd {
	return r.Time_()
}

func (r *redis_) Eval(script string, keys []string, args ...interface{}) *go_redisredis.Cmd {
	return r.Eval_(script, keys, args...)
}

func (r *redis_) EvalSha(sha1 string, keys []string, args ...interface{}) *go_redisredis.Cmd {
	return r.EvalSha_(sha1, keys, args...)
}

func (r *redis_) ScriptExists(hashes ...string) *go_redisredis.BoolSliceCmd {
	return r.ScriptExists_(hashes...)
}

func (r *redis_) ScriptFlush() *go_redisredis.StatusCmd {
	return r.ScriptFlush_()
}

func (r *redis_) ScriptKill() *go_redisredis.StatusCmd {
	return r.ScriptKill_()
}

func (r *redis_) ScriptLoad(script string) *go_redisredis.StringCmd {
	return r.ScriptLoad_(script)
}

func (r *redis_) DebugObject(key string) *go_redisredis.StringCmd {
	return r.DebugObject_(key)
}

func (r *redis_) Publish(channel string, message interface{}) *go_redisredis.IntCmd {
	return r.Publish_(channel, message)
}

func (r *redis_) PubSubChannels(pattern string) *go_redisredis.StringSliceCmd {
	return r.PubSubChannels_(pattern)
}

func (r *redis_) PubSubNumSub(channels ...string) *go_redisredis.StringIntMapCmd {
	return r.PubSubNumSub_(channels...)
}

func (r *redis_) PubSubNumPat() *go_redisredis.IntCmd {
	return r.PubSubNumPat_()
}

func (r *redis_) ClusterSlots() *go_redisredis.ClusterSlotsCmd {
	return r.ClusterSlots_()
}

func (r *redis_) ClusterNodes() *go_redisredis.StringCmd {
	return r.ClusterNodes_()
}

func (r *redis_) ClusterMeet(host, port string) *go_redisredis.StatusCmd {
	return r.ClusterMeet_(host, port)
}

func (r *redis_) ClusterForget(nodeID string) *go_redisredis.StatusCmd {
	return r.ClusterForget_(nodeID)
}

func (r *redis_) ClusterReplicate(nodeID string) *go_redisredis.StatusCmd {
	return r.ClusterReplicate_(nodeID)
}

func (r *redis_) ClusterResetSoft() *go_redisredis.StatusCmd {
	return r.ClusterResetSoft_()
}

func (r *redis_) ClusterResetHard() *go_redisredis.StatusCmd {
	return r.ClusterResetHard_()
}

func (r *redis_) ClusterInfo() *go_redisredis.StringCmd {
	return r.ClusterInfo_()
}

func (r *redis_) ClusterKeySlot(key string) *go_redisredis.IntCmd {
	return r.ClusterKeySlot_(key)
}

func (r *redis_) ClusterGetKeysInSlot(slot int, count int) *go_redisredis.StringSliceCmd {
	return r.ClusterGetKeysInSlot_(slot, count)
}

func (r *redis_) ClusterCountFailureReports(nodeID string) *go_redisredis.IntCmd {
	return r.ClusterCountFailureReports_(nodeID)
}

func (r *redis_) ClusterCountKeysInSlot(slot int) *go_redisredis.IntCmd {
	return r.ClusterCountKeysInSlot_(slot)
}

func (r *redis_) ClusterDelSlots(slots ...int) *go_redisredis.StatusCmd {
	return r.ClusterDelSlots_(slots...)
}

func (r *redis_) ClusterDelSlotsRange(min, max int) *go_redisredis.StatusCmd {
	return r.ClusterDelSlotsRange_(min, max)
}

func (r *redis_) ClusterSaveConfig() *go_redisredis.StatusCmd {
	return r.ClusterSaveConfig_()
}

func (r *redis_) ClusterSlaves(nodeID string) *go_redisredis.StringSliceCmd {
	return r.ClusterSlaves_(nodeID)
}

func (r *redis_) ClusterFailover() *go_redisredis.StatusCmd {
	return r.ClusterFailover_()
}

func (r *redis_) ClusterAddSlots(slots ...int) *go_redisredis.StatusCmd {
	return r.ClusterAddSlots_(slots...)
}

func (r *redis_) ClusterAddSlotsRange(min, max int) *go_redisredis.StatusCmd {
	return r.ClusterAddSlotsRange_(min, max)
}

func (r *redis_) GeoAdd(key string, geoLocation ...*go_redisredis.GeoLocation) *go_redisredis.IntCmd {
	return r.GeoAdd_(key, geoLocation...)
}

func (r *redis_) GeoPos(key string, members ...string) *go_redisredis.GeoPosCmd {
	return r.GeoPos_(key, members...)
}

func (r *redis_) GeoRadius(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd {
	return r.GeoRadius_(key, longitude, latitude, query)
}

func (r *redis_) GeoRadiusRO(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd {
	return r.GeoRadiusRO_(key, longitude, latitude, query)
}

func (r *redis_) GeoRadiusByMember(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd {
	return r.GeoRadiusByMember_(key, member, query)
}

func (r *redis_) GeoRadiusByMemberRO(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd {
	return r.GeoRadiusByMemberRO_(key, member, query)
}

func (r *redis_) GeoDist(key string, member1, member2, unit string) *go_redisredis.FloatCmd {
	return r.GeoDist_(key, member1, member2, unit)
}

func (r *redis_) GeoHash(key string, members ...string) *go_redisredis.StringSliceCmd {
	return r.GeoHash_(key, members...)
}

func (r *redis_) ReadOnly() *go_redisredis.StatusCmd {
	return r.ReadOnly_()
}

func (r *redis_) ReadWrite() *go_redisredis.StatusCmd {
	return r.ReadWrite_()
}

func (r *redis_) MemoryUsage(key string, samples ...int) *go_redisredis.IntCmd {
	return r.MemoryUsage_(key, samples...)
}

func (r *redis_) Context() contextx.Context {
	return r.Context_()
}

func (r *redis_) WithContext(ctx contextx.Context) RedisIOCInterface {
	return r.WithContext_(ctx)
}

func (r *redis_) Options() *go_redisredis.Options {
	return r.Options_()
}

func (r *redis_) SetLimiter(l go_redisredis.Limiter) RedisIOCInterface {
	return r.SetLimiter_(l)
}

func (r *redis_) PoolStats() *go_redisredis.PoolStats {
	return r.PoolStats_()
}

func (r *redis_) Pipelined(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error) {
	return r.Pipelined_(fn)
}

func (r *redis_) Pipeline() go_redisredis.Pipeliner {
	return r.Pipeline_()
}

func (r *redis_) TxPipelined(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error) {
	return r.TxPipelined_(fn)
}

func (r *redis_) TxPipeline() go_redisredis.Pipeliner {
	return r.TxPipeline_()
}

func (r *redis_) Subscribe(channels ...string) *go_redisredis.PubSub {
	return r.Subscribe_(channels...)
}

func (r *redis_) PSubscribe(channels ...string) *go_redisredis.PubSub {
	return r.PSubscribe_(channels...)
}

type RedisIOCInterface interface {
	Command() *go_redisredis.CommandsInfoCmd
	ClientGetName() *go_redisredis.StringCmd
	Echo(message interface{}) *go_redisredis.StringCmd
	Ping() *go_redisredis.StatusCmd
	Quit() *go_redisredis.StatusCmd
	Del(keys ...string) *go_redisredis.IntCmd
	Unlink(keys ...string) *go_redisredis.IntCmd
	Dump(key string) *go_redisredis.StringCmd
	Exists(keys ...string) *go_redisredis.IntCmd
	Expire(key string, expiration timex.Duration) *go_redisredis.BoolCmd
	ExpireAt(key string, tm timex.Time) *go_redisredis.BoolCmd
	Keys(pattern string) *go_redisredis.StringSliceCmd
	Migrate(host, port, key string, db int64, timeout timex.Duration) *go_redisredis.StatusCmd
	Move(key string, db int64) *go_redisredis.BoolCmd
	ObjectRefCount(key string) *go_redisredis.IntCmd
	ObjectEncoding(key string) *go_redisredis.StringCmd
	ObjectIdleTime(key string) *go_redisredis.DurationCmd
	Persist(key string) *go_redisredis.BoolCmd
	PExpire(key string, expiration timex.Duration) *go_redisredis.BoolCmd
	PExpireAt(key string, tm timex.Time) *go_redisredis.BoolCmd
	PTTL(key string) *go_redisredis.DurationCmd
	RandomKey() *go_redisredis.StringCmd
	Rename(key, newkey string) *go_redisredis.StatusCmd
	RenameNX(key, newkey string) *go_redisredis.BoolCmd
	Restore(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd
	RestoreReplace(key string, ttl timex.Duration, value string) *go_redisredis.StatusCmd
	Sort(key string, sort *go_redisredis.Sort) *go_redisredis.StringSliceCmd
	SortStore(key, store string, sort *go_redisredis.Sort) *go_redisredis.IntCmd
	SortInterfaces(key string, sort *go_redisredis.Sort) *go_redisredis.SliceCmd
	Touch(keys ...string) *go_redisredis.IntCmd
	TTL(key string) *go_redisredis.DurationCmd
	Type(key string) *go_redisredis.StatusCmd
	Scan(cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	SScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	HScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	ZScan(key string, cursor uint64, match string, count int64) *go_redisredis.ScanCmd
	Append(key, value string) *go_redisredis.IntCmd
	BitCount(key string, bitCount *go_redisredis.BitCount) *go_redisredis.IntCmd
	BitOpAnd(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpOr(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpXor(destKey string, keys ...string) *go_redisredis.IntCmd
	BitOpNot(destKey string, key string) *go_redisredis.IntCmd
	BitPos(key string, bit int64, pos ...int64) *go_redisredis.IntCmd
	Decr(key string) *go_redisredis.IntCmd
	DecrBy(key string, decrement int64) *go_redisredis.IntCmd
	Get(key string) *go_redisredis.StringCmd
	GetBit(key string, offset int64) *go_redisredis.IntCmd
	GetRange(key string, start, end int64) *go_redisredis.StringCmd
	GetSet(key string, value interface{}) *go_redisredis.StringCmd
	Incr(key string) *go_redisredis.IntCmd
	IncrBy(key string, value int64) *go_redisredis.IntCmd
	IncrByFloat(key string, value float64) *go_redisredis.FloatCmd
	MGet(keys ...string) *go_redisredis.SliceCmd
	MSet(pairs ...interface{}) *go_redisredis.StatusCmd
	MSetNX(pairs ...interface{}) *go_redisredis.BoolCmd
	Set(key string, value interface{}, expiration timex.Duration) *go_redisredis.StatusCmd
	SetBit(key string, offset int64, value int) *go_redisredis.IntCmd
	SetNX(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd
	SetXX(key string, value interface{}, expiration timex.Duration) *go_redisredis.BoolCmd
	SetRange(key string, offset int64, value string) *go_redisredis.IntCmd
	StrLen(key string) *go_redisredis.IntCmd
	HDel(key string, fields ...string) *go_redisredis.IntCmd
	HExists(key, field string) *go_redisredis.BoolCmd
	HGet(key, field string) *go_redisredis.StringCmd
	HGetAll(key string) *go_redisredis.StringStringMapCmd
	HIncrBy(key, field string, incr int64) *go_redisredis.IntCmd
	HIncrByFloat(key, field string, incr float64) *go_redisredis.FloatCmd
	HKeys(key string) *go_redisredis.StringSliceCmd
	HLen(key string) *go_redisredis.IntCmd
	HMGet(key string, fields ...string) *go_redisredis.SliceCmd
	HMSet(key string, fields map[string]interface{}) *go_redisredis.StatusCmd
	HSet(key, field string, value interface{}) *go_redisredis.BoolCmd
	HSetNX(key, field string, value interface{}) *go_redisredis.BoolCmd
	HVals(key string) *go_redisredis.StringSliceCmd
	BLPop(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd
	BRPop(timeout timex.Duration, keys ...string) *go_redisredis.StringSliceCmd
	BRPopLPush(source, destination string, timeout timex.Duration) *go_redisredis.StringCmd
	LIndex(key string, index int64) *go_redisredis.StringCmd
	LInsert(key, op string, pivot, value interface{}) *go_redisredis.IntCmd
	LInsertBefore(key string, pivot, value interface{}) *go_redisredis.IntCmd
	LInsertAfter(key string, pivot, value interface{}) *go_redisredis.IntCmd
	LLen(key string) *go_redisredis.IntCmd
	LPop(key string) *go_redisredis.StringCmd
	LPush(key string, values ...interface{}) *go_redisredis.IntCmd
	LPushX(key string, value interface{}) *go_redisredis.IntCmd
	LRange(key string, start, stop int64) *go_redisredis.StringSliceCmd
	LRem(key string, count int64, value interface{}) *go_redisredis.IntCmd
	LSet(key string, index int64, value interface{}) *go_redisredis.StatusCmd
	LTrim(key string, start, stop int64) *go_redisredis.StatusCmd
	RPop(key string) *go_redisredis.StringCmd
	RPopLPush(source, destination string) *go_redisredis.StringCmd
	RPush(key string, values ...interface{}) *go_redisredis.IntCmd
	RPushX(key string, value interface{}) *go_redisredis.IntCmd
	SAdd(key string, members ...interface{}) *go_redisredis.IntCmd
	SCard(key string) *go_redisredis.IntCmd
	SDiff(keys ...string) *go_redisredis.StringSliceCmd
	SDiffStore(destination string, keys ...string) *go_redisredis.IntCmd
	SInter(keys ...string) *go_redisredis.StringSliceCmd
	SInterStore(destination string, keys ...string) *go_redisredis.IntCmd
	SIsMember(key string, member interface{}) *go_redisredis.BoolCmd
	SMembers(key string) *go_redisredis.StringSliceCmd
	SMembersMap(key string) *go_redisredis.StringStructMapCmd
	SMove(source, destination string, member interface{}) *go_redisredis.BoolCmd
	SPop(key string) *go_redisredis.StringCmd
	SPopN(key string, count int64) *go_redisredis.StringSliceCmd
	SRandMember(key string) *go_redisredis.StringCmd
	SRandMemberN(key string, count int64) *go_redisredis.StringSliceCmd
	SRem(key string, members ...interface{}) *go_redisredis.IntCmd
	SUnion(keys ...string) *go_redisredis.StringSliceCmd
	SUnionStore(destination string, keys ...string) *go_redisredis.IntCmd
	XAdd(a *go_redisredis.XAddArgs) *go_redisredis.StringCmd
	XDel(stream string, ids ...string) *go_redisredis.IntCmd
	XLen(stream string) *go_redisredis.IntCmd
	XRange(stream, start, stop string) *go_redisredis.XMessageSliceCmd
	XRangeN(stream, start, stop string, count int64) *go_redisredis.XMessageSliceCmd
	XRevRange(stream string, start, stop string) *go_redisredis.XMessageSliceCmd
	XRevRangeN(stream string, start, stop string, count int64) *go_redisredis.XMessageSliceCmd
	XRead(a *go_redisredis.XReadArgs) *go_redisredis.XStreamSliceCmd
	XReadStreams(streams ...string) *go_redisredis.XStreamSliceCmd
	XGroupCreate(stream, group, start string) *go_redisredis.StatusCmd
	XGroupCreateMkStream(stream, group, start string) *go_redisredis.StatusCmd
	XGroupSetID(stream, group, start string) *go_redisredis.StatusCmd
	XGroupDestroy(stream, group string) *go_redisredis.IntCmd
	XGroupDelConsumer(stream, group, consumer string) *go_redisredis.IntCmd
	XReadGroup(a *go_redisredis.XReadGroupArgs) *go_redisredis.XStreamSliceCmd
	XAck(stream, group string, ids ...string) *go_redisredis.IntCmd
	XPending(stream, group string) *go_redisredis.XPendingCmd
	XPendingExt(a *go_redisredis.XPendingExtArgs) *go_redisredis.XPendingExtCmd
	XClaim(a *go_redisredis.XClaimArgs) *go_redisredis.XMessageSliceCmd
	XClaimJustID(a *go_redisredis.XClaimArgs) *go_redisredis.StringSliceCmd
	XTrim(key string, maxLen int64) *go_redisredis.IntCmd
	XTrimApprox(key string, maxLen int64) *go_redisredis.IntCmd
	BZPopMax(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd
	BZPopMin(timeout timex.Duration, keys ...string) *go_redisredis.ZWithKeyCmd
	ZAdd(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddNX(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddXX(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddNXCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZAddXXCh(key string, members ...go_redisredis.Z) *go_redisredis.IntCmd
	ZIncr(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZIncrNX(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZIncrXX(key string, member go_redisredis.Z) *go_redisredis.FloatCmd
	ZCard(key string) *go_redisredis.IntCmd
	ZCount(key, min, max string) *go_redisredis.IntCmd
	ZLexCount(key, min, max string) *go_redisredis.IntCmd
	ZIncrBy(key string, increment float64, member string) *go_redisredis.FloatCmd
	ZInterStore(destination string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd
	ZPopMax(key string, count ...int64) *go_redisredis.ZSliceCmd
	ZPopMin(key string, count ...int64) *go_redisredis.ZSliceCmd
	ZRange(key string, start, stop int64) *go_redisredis.StringSliceCmd
	ZRangeWithScores(key string, start, stop int64) *go_redisredis.ZSliceCmd
	ZRangeByScore(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRangeByLex(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRangeByScoreWithScores(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd
	ZRank(key, member string) *go_redisredis.IntCmd
	ZRem(key string, members ...interface{}) *go_redisredis.IntCmd
	ZRemRangeByRank(key string, start, stop int64) *go_redisredis.IntCmd
	ZRemRangeByScore(key, min, max string) *go_redisredis.IntCmd
	ZRemRangeByLex(key, min, max string) *go_redisredis.IntCmd
	ZRevRange(key string, start, stop int64) *go_redisredis.StringSliceCmd
	ZRevRangeWithScores(key string, start, stop int64) *go_redisredis.ZSliceCmd
	ZRevRangeByScore(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRevRangeByLex(key string, opt go_redisredis.ZRangeBy) *go_redisredis.StringSliceCmd
	ZRevRangeByScoreWithScores(key string, opt go_redisredis.ZRangeBy) *go_redisredis.ZSliceCmd
	ZRevRank(key, member string) *go_redisredis.IntCmd
	ZScore(key, member string) *go_redisredis.FloatCmd
	ZUnionStore(dest string, store go_redisredis.ZStore, keys ...string) *go_redisredis.IntCmd
	PFAdd(key string, els ...interface{}) *go_redisredis.IntCmd
	PFCount(keys ...string) *go_redisredis.IntCmd
	PFMerge(dest string, keys ...string) *go_redisredis.StatusCmd
	BgRewriteAOF() *go_redisredis.StatusCmd
	BgSave() *go_redisredis.StatusCmd
	ClientKill(ipPort string) *go_redisredis.StatusCmd
	ClientKillByFilter(keys ...string) *go_redisredis.IntCmd
	ClientList() *go_redisredis.StringCmd
	ClientPause(dur timex.Duration) *go_redisredis.BoolCmd
	ClientID() *go_redisredis.IntCmd
	ConfigGet(parameter string) *go_redisredis.SliceCmd
	ConfigResetStat() *go_redisredis.StatusCmd
	ConfigSet(parameter, value string) *go_redisredis.StatusCmd
	ConfigRewrite() *go_redisredis.StatusCmd
	DBSize() *go_redisredis.IntCmd
	FlushAll() *go_redisredis.StatusCmd
	FlushAllAsync() *go_redisredis.StatusCmd
	FlushDB() *go_redisredis.StatusCmd
	FlushDBAsync() *go_redisredis.StatusCmd
	Info(section ...string) *go_redisredis.StringCmd
	LastSave() *go_redisredis.IntCmd
	Save() *go_redisredis.StatusCmd
	Shutdown() *go_redisredis.StatusCmd
	ShutdownSave() *go_redisredis.StatusCmd
	ShutdownNoSave() *go_redisredis.StatusCmd
	SlaveOf(host, port string) *go_redisredis.StatusCmd
	Time() *go_redisredis.TimeCmd
	Eval(script string, keys []string, args ...interface{}) *go_redisredis.Cmd
	EvalSha(sha1 string, keys []string, args ...interface{}) *go_redisredis.Cmd
	ScriptExists(hashes ...string) *go_redisredis.BoolSliceCmd
	ScriptFlush() *go_redisredis.StatusCmd
	ScriptKill() *go_redisredis.StatusCmd
	ScriptLoad(script string) *go_redisredis.StringCmd
	DebugObject(key string) *go_redisredis.StringCmd
	Publish(channel string, message interface{}) *go_redisredis.IntCmd
	PubSubChannels(pattern string) *go_redisredis.StringSliceCmd
	PubSubNumSub(channels ...string) *go_redisredis.StringIntMapCmd
	PubSubNumPat() *go_redisredis.IntCmd
	ClusterSlots() *go_redisredis.ClusterSlotsCmd
	ClusterNodes() *go_redisredis.StringCmd
	ClusterMeet(host, port string) *go_redisredis.StatusCmd
	ClusterForget(nodeID string) *go_redisredis.StatusCmd
	ClusterReplicate(nodeID string) *go_redisredis.StatusCmd
	ClusterResetSoft() *go_redisredis.StatusCmd
	ClusterResetHard() *go_redisredis.StatusCmd
	ClusterInfo() *go_redisredis.StringCmd
	ClusterKeySlot(key string) *go_redisredis.IntCmd
	ClusterGetKeysInSlot(slot int, count int) *go_redisredis.StringSliceCmd
	ClusterCountFailureReports(nodeID string) *go_redisredis.IntCmd
	ClusterCountKeysInSlot(slot int) *go_redisredis.IntCmd
	ClusterDelSlots(slots ...int) *go_redisredis.StatusCmd
	ClusterDelSlotsRange(min, max int) *go_redisredis.StatusCmd
	ClusterSaveConfig() *go_redisredis.StatusCmd
	ClusterSlaves(nodeID string) *go_redisredis.StringSliceCmd
	ClusterFailover() *go_redisredis.StatusCmd
	ClusterAddSlots(slots ...int) *go_redisredis.StatusCmd
	ClusterAddSlotsRange(min, max int) *go_redisredis.StatusCmd
	GeoAdd(key string, geoLocation ...*go_redisredis.GeoLocation) *go_redisredis.IntCmd
	GeoPos(key string, members ...string) *go_redisredis.GeoPosCmd
	GeoRadius(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusRO(key string, longitude, latitude float64, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusByMember(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoRadiusByMemberRO(key, member string, query *go_redisredis.GeoRadiusQuery) *go_redisredis.GeoLocationCmd
	GeoDist(key string, member1, member2, unit string) *go_redisredis.FloatCmd
	GeoHash(key string, members ...string) *go_redisredis.StringSliceCmd
	ReadOnly() *go_redisredis.StatusCmd
	ReadWrite() *go_redisredis.StatusCmd
	MemoryUsage(key string, samples ...int) *go_redisredis.IntCmd
	Context() contextx.Context
	WithContext(ctx contextx.Context) RedisIOCInterface
	Options() *go_redisredis.Options
	SetLimiter(l go_redisredis.Limiter) RedisIOCInterface
	PoolStats() *go_redisredis.PoolStats
	Pipelined(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error)
	Pipeline() go_redisredis.Pipeliner
	TxPipelined(fn func(go_redisredis.Pipeliner) error) ([]go_redisredis.Cmder, error)
	TxPipeline() go_redisredis.Pipeliner
	Subscribe(channels ...string) *go_redisredis.PubSub
	PSubscribe(channels ...string) *go_redisredis.PubSub
}

var _redisSDID string

func GetRedis(p *Param) (*Redis, error) {
	if _redisSDID == "" {
		_redisSDID = util.GetSDIDByStructPtr(new(Redis))
	}
	i, err := normal.GetImpl(_redisSDID, p)
	if err != nil {
		return nil, err
	}
	impl := i.(*Redis)
	return impl, nil
}

func GetRedisIOCInterface(p *Param) (RedisIOCInterface, error) {
	if _redisSDID == "" {
		_redisSDID = util.GetSDIDByStructPtr(new(Redis))
	}
	i, err := normal.GetImplWithProxy(_redisSDID, p)
	if err != nil {
		return nil, err
	}
	impl := i.(RedisIOCInterface)
	return impl, nil
}

func GetRedisSingleton(p *Param) (*Redis, error) {
	if _redisSDID == "" {
		_redisSDID = util.GetSDIDByStructPtr(new(Redis))
	}
	i, err := singleton.GetImpl(_redisSDID, p)
	if err != nil {
		return nil, err
	}
	impl := i.(*Redis)
	return impl, nil
}

func GetRedisIOCInterfaceSingleton(p *Param) (RedisIOCInterface, error) {
	if _redisSDID == "" {
		_redisSDID = util.GetSDIDByStructPtr(new(Redis))
	}
	i, err := singleton.GetImplWithProxy(_redisSDID, p)
	if err != nil {
		return nil, err
	}
	impl := i.(RedisIOCInterface)
	return impl, nil
}

type ThisRedis struct {
}

func (t *ThisRedis) This() RedisIOCInterface {
	thisPtr, _ := GetRedisIOCInterfaceSingleton(nil)
	return thisPtr
}
