driver

package
v0.0.0-...-8bd0779 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 3, 2023 License: Apache-2.0 Imports: 8 Imported by: 8

Documentation

Overview

core struct cmd op interface driver

Index

Constants

View Source
const (
	CmdTypeSrv     = "srv"
	CmdTypeReplica = "replica"
	CmdTypeBitmap  = "bitmap"
	CmdTypeString  = "string"
	CmdTypeHash    = "hash"
	CmdTypeList    = "list"
	CmdTypeSet     = "set"
	CmdTypeZset    = "zset"
	CmdTypeSlot    = "slot"
)

Variables

View Source
var RegisteredCmdHandles = map[string]CmdHandle{}
View Source
var RegisteredCmdSet = map[string][]string{}
View Source
var RegisteredDumpHandlerNames = []DumpSrvInfoName{}
View Source
var RegisteredDumpHandlers = map[DumpSrvInfoName]DumpHandler{}
View Source
var RegisteredReadCmdAtApplyHandles = map[string]CmdHandle{}
View Source
var RegisteredReadCmdAtProposeHandles = map[string]CmdHandle{}
View Source
var RegisteredReplicaCmdHandles = map[string]CmdHandle{}
View Source
var RegisteredWriteCmdAtApplyHandles = map[string]CmdHandle{}
View Source
var RegisteredWriteCmdAtProposeHandles = map[string]CmdHandle{}

Functions

func ListRespCmdSrvs

func ListRespCmdSrvs() []string

func ListStoragers

func ListStoragers() []string

func MergeRegisteredCmdHandles

func MergeRegisteredCmdHandles(src, dst map[string]CmdHandle, isDelSrc bool)

func RegisterCmd

func RegisterCmd(cmdType, cmd string, handle CmdHandle)

RegisterCmd register all cmd

func RegisterDumpHandler

func RegisterDumpHandler(name DumpSrvInfoName, handler DumpHandler)

func RegisterRespCmdSrv

func RegisterRespCmdSrv(s IRespService) error

func RegisterStorager

func RegisterStorager(s IStorager) error

func RegisterWriteCmdAtApply

func RegisterWriteCmdAtApply(cmdType, cmd string, handle CmdHandle)

RegisterWriteCmdAtApply

func RegisterWriteCmdAtPropose

func RegisterWriteCmdAtPropose(cmdType, cmd string, handle CmdHandle)

RegisterWriteCmdAtPropose

func RegisteredReadCmdAtApply

func RegisteredReadCmdAtApply(cmdType, cmd string, handle CmdHandle)

RegisterReadCmdAtApply

func RegisteredReadCmdAtPropose

func RegisteredReadCmdAtPropose(cmdType, cmd string, handle CmdHandle)

RegisterReadCmdAtPropose

Types

type CmdHandle

type CmdHandle func(ctx context.Context, c IRespConn, cmdParams [][]byte) (interface{}, error)

type DumpHandler

type DumpHandler func(w io.Writer)

type DumpSrvInfoName

type DumpSrvInfoName string

func (DumpSrvInfoName) FirstToUp

func (name DumpSrvInfoName) FirstToUp() []byte

func (DumpSrvInfoName) RespDumpName

func (name DumpSrvInfoName) RespDumpName() []byte

func (DumpSrvInfoName) ToLow

func (name DumpSrvInfoName) ToLow() []byte

type FVPair

type FVPair struct {
	Field []byte
	Value []byte
}

type IBitmapCmd

type IBitmapCmd interface {
	BitOP(ctx context.Context, op string, destKey []byte, srcKeys ...[]byte) (int64, error)
	BitCount(ctx context.Context, key []byte, start int, end int) (int64, error)
	BitPos(ctx context.Context, key []byte, on int, start int, end int) (int64, error)
	SetBit(ctx context.Context, key []byte, offset int, on int) (int64, error)
	GetBit(ctx context.Context, key []byte, offset int) (int64, error)
}

adapt https://redis.io/commands/?group=bitmap

type ICommonCmd

type ICommonCmd interface {
	Del(ctx context.Context, keys ...[]byte) (int64, error)
	Exists(ctx context.Context, key []byte) (int64, error)
	// for ttl
	Expire(ctx context.Context, key []byte, duration int64) (int64, error)
	ExpireAt(ctx context.Context, key []byte, when int64) (int64, error)
	TTL(ctx context.Context, key []byte) (int64, error)
	Persist(ctx context.Context, key []byte) (int64, error)
}

adapt https://redis.io/commands/?group=generic some common key op cmd

type IDB

type IDB interface {
	FlushDB(ctx context.Context) (drop int64, err error)

	DBString() IStringCmd
	DBList() IListCmd
	DBHash() IHashCmd
	DBSet() ISetCmd
	DBZSet() IZsetCmd
	DBBitmap() IBitmapCmd
}

type IDBSlots

type IDBSlots interface {
	IDB
	DBSlot() ISlotsCmd
}

type IHashCmd

type IHashCmd interface {
	HSet(ctx context.Context, key []byte, field []byte, value []byte) (int64, error)
	HGet(ctx context.Context, key []byte, field []byte) ([]byte, error)
	HLen(ctx context.Context, key []byte) (int64, error)
	HMset(ctx context.Context, key []byte, args ...FVPair) error
	HMget(ctx context.Context, key []byte, args ...[]byte) ([][]byte, error)
	HDel(ctx context.Context, key []byte, args ...[]byte) (int64, error)
	HIncrBy(ctx context.Context, key []byte, field []byte, delta int64) (int64, error)
	HGetAll(ctx context.Context, key []byte) ([]FVPair, error)
	HKeys(ctx context.Context, key []byte) ([][]byte, error)
	HValues(ctx context.Context, key []byte) ([][]byte, error)

	ICommonCmd
}

adapt https://redis.io/commands/?group=hash

type IListCmd

type IListCmd interface {
	LIndex(ctx context.Context, key []byte, index int32) ([]byte, error)
	LLen(ctx context.Context, key []byte) (int64, error)
	LPop(ctx context.Context, key []byte) ([]byte, error)
	LTrim(ctx context.Context, key []byte, start, stop int64) error
	LTrimFront(ctx context.Context, key []byte, trimSize int32) (int32, error)
	LTrimBack(ctx context.Context, key []byte, trimSize int32) (int32, error)
	LPush(ctx context.Context, key []byte, args ...[]byte) (int64, error)
	LSet(ctx context.Context, key []byte, index int32, value []byte) error
	LRange(ctx context.Context, key []byte, start int32, stop int32) ([][]byte, error)
	RPop(ctx context.Context, key []byte) ([]byte, error)
	RPush(ctx context.Context, key []byte, args ...[]byte) (int64, error)
	BLPop(ctx context.Context, keys [][]byte, timeout time.Duration) ([]interface{}, error)
	BRPop(ctx context.Context, keys [][]byte, timeout time.Duration) ([]interface{}, error)

	ICommonCmd
}

adapt https://redis.io/commands/?group=list

type IReplicaSrvConnCmd

type IReplicaSrvConnCmd interface {
	// Replicaof client cmd in slave
	Replicaof(ctx context.Context, string, restart bool, readonly bool) error
	// Sync internal cmd for slave send sync cmd to master,
	// slave pull buf (sync logs)
	Sync(ctx context.Context, syncLogID uint64) (buf []byte, err error)
	// Sync internal cmd for slave send fullsync cmd to master,
	// slave pull master's snapshot file which dump from data kvstore(FSM),
	// then write to connFD (io.CopyN)
	FullSync(ctx context.Context, needNew bool) (err error)
}

type IRespConn

type IRespConn interface {
	SetStorager(db IStorager)
	Storager() (store IStorager)
	SetDb(db IDB)
	Db() (db IDB)
	SetConnName(name string)
	Name() (name string)
	DoCmd(ctx context.Context, cmd string, cmdParams [][]byte) (res interface{}, err error)
	Close() error
}

IRespConn resp conn session

type IRespService

type IRespService interface {
	// Start service
	Start(ctx context.Context) (err error)
	// InitRespConn init resp connect session by select db index,
	// return IRespConn interface
	InitRespConn(ctx context.Context, dbIdx int) IRespConn
	// Close resp service
	Close() (err error)
	// Name
	Name() RespServiceName
	// SetStorager
	SetStorager(store IStorager)
}

func GetRespCmdSrv

func GetRespCmdSrv(name RespServiceName) (IRespService, error)

type ISetCmd

type ISetCmd interface {
	SAdd(ctx context.Context, key []byte, args ...[]byte) (int64, error)
	SCard(ctx context.Context, key []byte) (int64, error)
	SDiff(ctx context.Context, keys ...[]byte) ([][]byte, error)
	SDiffStore(ctx context.Context, dstKey []byte, keys ...[]byte) (int64, error)
	SInter(ctx context.Context, keys ...[]byte) ([][]byte, error)
	SInterStore(ctx context.Context, dstKey []byte, keys ...[]byte) (int64, error)
	SIsMember(ctx context.Context, key []byte, member []byte) (int64, error)
	SMembers(ctx context.Context, key []byte) ([][]byte, error)
	SRem(ctx context.Context, key []byte, args ...[]byte) (int64, error)
	SUnion(ctx context.Context, keys ...[]byte) ([][]byte, error)
	SUnionStore(ctx context.Context, dstKey []byte, keys ...[]byte) (int64, error)

	ICommonCmd
}

adapt https://redis.io/commands/?group=set

type ISlotsCmd

type ISlotsCmd interface {
	// MigrateSlotOneKey migrate slot one key/val to addr with timeout (ms)
	// return 1, success, 0 slot is empty
	MigrateSlotOneKey(ctx context.Context, addr string, timeout time.Duration, slot uint64) (int64, error)
	// MigrateSlotKeyWithSameTag migrate slot keys/vals  which have the same tag with one key to addr with timeout (ms)
	// return n, success, 0 slot is empty
	MigrateSlotKeyWithSameTag(ctx context.Context, addr string, timeout time.Duration, slot uint64) (int64, error)
	// MigrateOneKey migrate one key/val (no hash tag  tag=key) to addr with timeout (ms)
	// return n (same key, diff dataType), success, 0 slot is empty
	MigrateOneKey(ctx context.Context, addr string, timeout time.Duration, key []byte) (int64, error)
	// MigrateKeyWithSameTag migrate keys/vals which have the same tag with one key to addr with timeout (ms)
	// return n, n migrate success, 0 slot is empty
	MigrateKeyWithSameTag(ctx context.Context, addr string, timeout time.Duration, key []byte) (int64, error)
	// SlotsRestore dest migrate addr restore slot obj [key ttlms serialized-value(rdb) ...]
	SlotsRestore(ctx context.Context, objs ...*SlotsRestoreObj) error
	// SlotsInfo show slot info with slots range [start,start+count]
	// return slotInfo slice
	// if withSize is true, slotInfo.Size is keys cn; else exits key is 1, or 0
	SlotsInfo(ctx context.Context, startSlot, count uint64, withSize bool) ([]*SlotInfo, error)
	// SlotsHashKey hash keys to slots, return slot slice
	SlotsHashKey(ctx context.Context, keys ...[]byte) ([]uint64, error)
	// SlotsDel del slots, return after del slot info
	SlotsDel(ctx context.Context, slots ...uint64) ([]*SlotInfo, error)
	// SlotsCheck slots  must check below case
	// - The key stored in each slot can find the corresponding val in the db
	// - Keys in each db can be found in the corresponding slot
	// WARNING: just used debug/test, don't use in product,
	SlotsCheck(ctx context.Context) error
}

type ISrvInfo

type ISrvInfo interface {
	DumpBytes(name DumpSrvInfoName) []byte
}

type IStatsStorager

type IStatsStorager interface {
	IStorager
	StatsInfo(sections ...string) (info map[string][]InfoPair)
}

type IStorager

type IStorager interface {
	Select(ctx context.Context, index int) (db IDB, err error)
	FlushAll(ctx context.Context) error
	Open(ctx context.Context) error
	Close() error
	Name() string
}

func GetStorager

func GetStorager(name string) (IStorager, error)

type IStringCmd

type IStringCmd interface {
	Set(ctx context.Context, key []byte, value []byte) error
	SetNX(ctx context.Context, key []byte, value []byte) (n int64, err error)
	SetEX(ctx context.Context, key []byte, duration int64, value []byte) error
	SetNXEX(ctx context.Context, key []byte, duration int64, value []byte) (n int64, err error)
	SetXXEX(ctx context.Context, key []byte, duration int64, value []byte) (n int64, err error)

	Get(ctx context.Context, key []byte) ([]byte, error)
	GetSlice(ctx context.Context, key []byte) (openkvdriver.ISlice, error)
	GetSet(ctx context.Context, key []byte, value []byte) ([]byte, error)

	Incr(ctx context.Context, key []byte) (int64, error)
	IncrBy(ctx context.Context, key []byte, increment int64) (int64, error)
	Decr(ctx context.Context, key []byte) (int64, error)
	DecrBy(ctx context.Context, key []byte, decrement int64) (int64, error)

	MGet(ctx context.Context, keys ...[]byte) ([][]byte, error)
	MSet(ctx context.Context, args ...KVPair) error

	SetRange(ctx context.Context, key []byte, offset int, value []byte) (int64, error)
	GetRange(ctx context.Context, key []byte, start int, end int) ([]byte, error)

	StrLen(ctx context.Context, key []byte) (int64, error)
	Append(ctx context.Context, key []byte, value []byte) (int64, error)

	ICommonCmd
}

adapt https://redis.io/commands/?group=string

type IZsetCmd

type IZsetCmd interface {
	ZAdd(ctx context.Context, key []byte, args ...ScorePair) (int64, error)
	ZCard(ctx context.Context, key []byte) (int64, error)
	ZScore(ctx context.Context, key []byte, member []byte) (int64, error)
	ZRem(ctx context.Context, key []byte, members ...[]byte) (int64, error)
	ZIncrBy(ctx context.Context, key []byte, delta int64, member []byte) (int64, error)
	ZCount(ctx context.Context, key []byte, min int64, max int64) (int64, error)
	ZRank(ctx context.Context, key []byte, member []byte) (int64, error)
	ZRemRangeByRank(ctx context.Context, key []byte, start int, stop int) (int64, error)
	ZRemRangeByScore(ctx context.Context, key []byte, min int64, max int64) (int64, error)
	ZRevRange(ctx context.Context, key []byte, start int, stop int) ([]ScorePair, error)
	ZRevRank(ctx context.Context, key []byte, member []byte) (int64, error)
	ZRevRangeByScore(ctx context.Context, key []byte, min int64, max int64, offset int, count int) ([]ScorePair, error)
	ZRangeGeneric(ctx context.Context, key []byte, start int, stop int, reverse bool) ([]ScorePair, error)
	ZRangeByScoreGeneric(ctx context.Context, key []byte, min int64, max int64, offset int, count int, reverse bool) ([]ScorePair, error)
	ZUnionStore(ctx context.Context, destKey []byte, srcKeys [][]byte, weights []int64, aggregate []byte) (int64, error)
	ZInterStore(ctx context.Context, destKey []byte, srcKeys [][]byte, weights []int64, aggregate []byte) (int64, error)
	ZRangeByLex(ctx context.Context, key []byte, min []byte, max []byte, rangeType RangeType, offset int, count int) ([][]byte, error)
	ZRemRangeByLex(ctx context.Context, key []byte, min []byte, max []byte, rangeType RangeType) (int64, error)
	ZLexCount(ctx context.Context, key []byte, min []byte, max []byte, rangeType RangeType) (int64, error)

	ICommonCmd
}

adapt https://redis.io/commands/?group=sorted-set

type InfoPair

type InfoPair struct {
	Key   string
	Value interface{}
}

func (InfoPair) RespDumpInfo

func (pair InfoPair) RespDumpInfo() []byte

type KVPair

type KVPair struct {
	Key   []byte
	Value []byte
}

type RangeType

type RangeType uint8

RangeType:

RangeClose: [min, max]
RangeLopen: (min, max]
RangeRopen: [min, max)
RangeOpen: (min, max)
const (
	RangeClose RangeType = 0x00
	RangeLOpen RangeType = 0x01
	RangeROpen RangeType = 0x10
	RangeOpen  RangeType = 0x11
)

type RespConnBase

type RespConnBase struct {
	// contains filtered or unexported fields
}

func (*RespConnBase) Close

func (c *RespConnBase) Close() error

func (*RespConnBase) Db

func (c *RespConnBase) Db() (db IDB)

func (*RespConnBase) DoCmd

func (c *RespConnBase) DoCmd(ctx context.Context, cmd string, cmdParams [][]byte) (res interface{}, err error)

func (*RespConnBase) Name

func (c *RespConnBase) Name() (name string)

func (*RespConnBase) SetConnName

func (c *RespConnBase) SetConnName(name string)

func (*RespConnBase) SetDb

func (c *RespConnBase) SetDb(db IDB)

func (*RespConnBase) SetStorager

func (c *RespConnBase) SetStorager(store IStorager)

func (*RespConnBase) Storager

func (c *RespConnBase) Storager() (store IStorager)

type RespServiceName

type RespServiceName string

type ScorePair

type ScorePair struct {
	Score  int64
	Member []byte
}

type SlotInfo

type SlotInfo struct {
	Num  uint64
	Size uint64
}

type SlotsRestoreObj

type SlotsRestoreObj struct {
	DB       int32
	Key, Val []byte
	TTLms    int64
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL