diff options
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -81,6 +81,27 @@ func handleDel(conn net.Conn, key string){ db.mu.Unlock() } +func handleIncr(conn net.Conn, key string){ + db.mu.Lock() + value, exists := db.data[key] + if exists { + currentInt, err := strconv.Atoi(value) + if err != nil { + conn.Write([]byte("-ERR value is not an integer or out of range\r\n")) + } + + newValueStr := strconv.Itoa(currentInt+1) + db.data[key] = newValueStr + conn.Write([]byte(":" + newValueStr + "\r\n")) + }else{ + db.data[key] = "1" + conn.Write([]byte(":1\r\n")) + } + + db.mu.Unlock() + +} + func parseRESP(reader *bufio.Reader) ([]string, error) { line, err := reader.ReadString('\n') if err != nil { @@ -144,6 +165,8 @@ func handleConnection(conn net.Conn) { handleExists(conn, args[1]) case command == "DEL" && len(args) == 2: handleDel(conn, args[1]) + case command == "INCR" && len(args) == 2: + handleIncr(conn, args[1]) default: conn.Write([]byte("-ERR unknown command or wrong arguments\r\n")) } |
