aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-09 16:51:26 +0200
committeralex <[email protected]>2026-07-09 16:51:26 +0200
commit8126486c8e488a6f541fb8b3bc65156fa983c489 (patch)
tree4207059a31b72a00955b7df693598549f35e1d1f
parent6aebb5bb1d35016bc8e3bed04e971614898cb6ff (diff)
downloadredis-clone-8126486c8e488a6f541fb8b3bc65156fa983c489.tar.xz
redis-clone-8126486c8e488a6f541fb8b3bc65156fa983c489.zip
added RENAME command
-rw-r--r--handlers.go24
-rw-r--r--main.go1
2 files changed, 25 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go
index 0b5267c..105bca0 100644
--- a/handlers.go
+++ b/handlers.go
@@ -197,6 +197,30 @@ func handleFlushall(conn net.Conn, args []string) {
})
conn.Write(serializeRESP(result))
}
+
+func handleRename(conn net.Conn, args []string){
+ if len(args) != 3 {
+ err := errors.New("wrong number of arguments for 'RENAME'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+ keys := args[1:]
+
+ result := db.ExecuteMulti(keys,func(shards []*Shard)interface{}{
+ item, exists := db.getShard(keys[0]).data[keys[0]]
+ if !exists {
+
+ return errors.New("no such key")
+ }
+
+ db.getShard(keys[1]).data[keys[1]] = item
+ delete(db.getShard(keys[0]).data, keys[0])
+
+ return SimpleString("OK")
+ })
+ conn.Write(serializeRESP(result))
+}
+
/*
func handleRpush(conn net.Conn, args []string) {
key := args[1]
diff --git a/main.go b/main.go
index cd9cb7a..2364d02 100644
--- a/main.go
+++ b/main.go
@@ -23,6 +23,7 @@ var commandRegistry = map[string]handlerFunc{
"INCR": handleIncr,
"DECR": handleDecr,
"PING": handlePing,
+ "RENAME": handleRename,
/* "FLUSHALL": handleFlushall,
"RPUSH": handleRpush,
"LPUSH": handleLpush,