mirror of
https://github.com/HDT3213/godis.git
synced 2025-10-03 16:06:38 +08:00

wip: raft does not care about migrating wip: optimize code wip: raft election wip wip: fix raft leader missing log entries wip fix a dead lock batch set slot route wip: raft persist wip refactor cluster suite remove relay rename relay2 refactor: allow customizing client factory test raft refactor re-balance avoid errors caused by inconsistent status on follower nodes during raft commits test raft election
42 lines
1.4 KiB
Go
42 lines
1.4 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/hdt3213/godis/interface/redis"
|
|
"time"
|
|
)
|
|
|
|
// CmdLine is alias for [][]byte, represents a command line
|
|
type CmdLine = [][]byte
|
|
|
|
// DB is the interface for redis style storage engine
|
|
type DB interface {
|
|
Exec(client redis.Connection, cmdLine [][]byte) redis.Reply
|
|
AfterClientClose(c redis.Connection)
|
|
Close()
|
|
}
|
|
|
|
// KeyEventCallback will be called back on key event, such as key inserted or deleted
|
|
// may be called concurrently
|
|
type KeyEventCallback func(dbIndex int, key string, entity *DataEntity)
|
|
|
|
// DBEngine is the embedding storage engine exposing more methods for complex application
|
|
type DBEngine interface {
|
|
DB
|
|
ExecWithLock(conn redis.Connection, cmdLine [][]byte) redis.Reply
|
|
ExecMulti(conn redis.Connection, watching map[string]uint32, cmdLines []CmdLine) redis.Reply
|
|
GetUndoLogs(dbIndex int, cmdLine [][]byte) []CmdLine
|
|
ForEach(dbIndex int, cb func(key string, data *DataEntity, expiration *time.Time) bool)
|
|
RWLocks(dbIndex int, writeKeys []string, readKeys []string)
|
|
RWUnLocks(dbIndex int, writeKeys []string, readKeys []string)
|
|
GetDBSize(dbIndex int) (int, int)
|
|
GetEntity(dbIndex int, key string) (*DataEntity, bool)
|
|
GetExpiration(dbIndex int, key string) *time.Time
|
|
SetKeyInsertedCallback(cb KeyEventCallback)
|
|
SetKeyDeletedCallback(cb KeyEventCallback)
|
|
}
|
|
|
|
// DataEntity stores data bound to a key, including a string, list, hash, set and so on
|
|
type DataEntity struct {
|
|
Data interface{}
|
|
}
|