aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-07 19:19:14 +0200
committeralex <[email protected]>2026-07-07 19:19:14 +0200
commit0c6fb165243ae087143dfab6f357437bbeb2c529 (patch)
treefd9a8bb814edf76af9d15c698bcd8fa47e360614
parent46ed94f273930ec2842ca4e5c37624c1da584fc4 (diff)
downloadredis-clone-0c6fb165243ae087143dfab6f357437bbeb2c529.tar.xz
redis-clone-0c6fb165243ae087143dfab6f357437bbeb2c529.zip
added LPUSH command
-rw-r--r--handlers.go38
-rw-r--r--main.go1
2 files changed, 39 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go
index 5bf16a8..3b7fb76 100644
--- a/handlers.go
+++ b/handlers.go
@@ -200,6 +200,12 @@ func handleRpush(conn net.Conn, args []string) {
key := args[1]
newItems := args[2:]
+ if len(args) < 3 {
+ err := errors.New("wrong number of arguments for 'RPUSH'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
db.mu.Lock()
defer db.mu.Unlock()
@@ -222,6 +228,38 @@ func handleRpush(conn net.Conn, args []string) {
conn.Write(serializeRESP(len(list)))
}
+func handleLpush(conn net.Conn, args []string) {
+ key := args[1]
+ newItems := args[2:]
+
+ if len(args) < 3 {
+ err := errors.New("wrong number of arguments for 'LPUSH'")
+ conn.Write(serializeRESP(err))
+ return
+ }
+
+ db.mu.Lock()
+ defer db.mu.Unlock()
+
+ var list []string
+ existingItem, exists := db.data[key]
+
+ if exists {
+ var ok bool
+ list, ok = existingItem.Value.([]string)
+ if !ok {
+ err := errors.New("WRONGTYPE Operation against a key holding the wrong kind of value")
+ conn.Write(serializeRESP(err))
+ return
+ }
+ } else {
+ list = []string{}
+ }
+ list = append(newItems, list...)
+ db.data[key] = Item{Value: list}
+ conn.Write(serializeRESP(len(list)))
+}
+
func handleLrange(conn net.Conn, args []string) {
db.mu.Lock()
defer db.mu.Unlock()
diff --git a/main.go b/main.go
index cbdae4b..82c3542 100644
--- a/main.go
+++ b/main.go
@@ -25,6 +25,7 @@ var commandRegistry = map[string]handlerFunc{
"PING": handlePing,
"FLUSHALL": handleFlushall,
"RPUSH": handleRpush,
+ "LPUSH": handleLpush,
"LRANGE": handleLrange,
"LPOP": handleLpop,
"RPOP": handleRpop,