package commands import ( "errors" "redisClone/pkg/core" ) func SingleKey(args []string) []string { return []string{args[1]} } func AllSubsequentKeys(args []string) []string { return args[1:] } func NoKeys(args []string) []string { return nil } type CommandDef struct{ MinArgs int ExtractKeys func(args []string)[]string Execute func(args []string, getShard func(k string) *core.Shard) interface{} } func DispatchBaseCommand(db core.RedisDB ,commandName string, args []string) interface{} { cmd, exists := Registry[commandName] if !exists { return nil } if len(args) < cmd.MinArgs { return errors.New("wrong number of arguments") } keys := cmd.ExtractKeys(args) db.Lock(keys) defer db.Unlock(keys) return cmd.Execute(args, db.GetShard) } var Registry = map[string]CommandDef{ "GET": { MinArgs: 2, ExtractKeys: SingleKey, Execute: Get, }, "SET": { MinArgs: 3, ExtractKeys: SingleKey, Execute: Set, }, "DEL": { MinArgs: 2, ExtractKeys: AllSubsequentKeys, Execute: Del, }, }