aboutsummaryrefslogtreecommitdiff
path: root/handlers.go
diff options
context:
space:
mode:
authoralex <[email protected]>2026-07-06 22:53:50 +0200
committeralex <[email protected]>2026-07-06 22:53:50 +0200
commit6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f (patch)
tree122bcc37a5619459d1ecad69828510efa4be0318 /handlers.go
parent291a6c9044723fcbcce18a3cd12509d5fdac4702 (diff)
downloadredis-clone-6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f.tar.xz
redis-clone-6a4a4387c1fbcf2e40c64eecdba8148d557f9f0f.zip
added HKEYS and HVALUES
Diffstat (limited to 'handlers.go')
-rw-r--r--handlers.go56
1 files changed, 56 insertions, 0 deletions
diff --git a/handlers.go b/handlers.go
index a6ae6ef..aacabe5 100644
--- a/handlers.go
+++ b/handlers.go
@@ -487,4 +487,60 @@ func handleHgetall(conn net.Conn, args []string){
return
}
conn.Write(serializeRESP(hash))
+}
+
+func handleHkeys(conn net.Conn, args []string){
+ if len(args) != 2 {
+ conn.Write(serializeRESP(errors.New("ERR wrong number of arguments for 'HKEYS'")))
+ return
+ }
+ key := args[1]
+
+ db.mu.Lock()
+ defer db.mu.Unlock()
+
+ item, exists := db.data[key]
+ if !exists {
+ conn.Write(serializeRESP(nil))
+ return
+ }
+
+ hash, ok := item.Value.(map[string]string)
+ if !ok {
+ conn.Write(serializeRESP(errors.New("WRONGTYPE Operation against a key holding the wrong kind of value")))
+ return
+ }
+ result := make([]string, 0, len(hash))
+ for key := range hash {
+ result = append(result, key)
+ }
+ conn.Write(serializeRESP(result))
+}
+
+func handleHvalues(conn net.Conn, args []string){
+ if len(args) != 2 {
+ conn.Write(serializeRESP(errors.New("ERR wrong number of arguments for 'HVALUES'")))
+ return
+ }
+ key := args[1]
+
+ db.mu.Lock()
+ defer db.mu.Unlock()
+
+ item, exists := db.data[key]
+ if !exists {
+ conn.Write(serializeRESP(nil))
+ return
+ }
+
+ hash, ok := item.Value.(map[string]string)
+ if !ok {
+ conn.Write(serializeRESP(errors.New("WRONGTYPE Operation against a key holding the wrong kind of value")))
+ return
+ }
+ result := make([]string, 0, len(hash))
+ for _, value := range hash {
+ result = append(result, value)
+ }
+ conn.Write(serializeRESP(result))
} \ No newline at end of file