RESP 常见格式

常见 Redis 命令及其 RESP 编码

1. SET

设置指定键的值。

  • 命令格式

    *3
    $3
    SET
    $3
    key
    $5
    value
    
  • 解释

    • *3 表示接下来有 3 个元素。
    • $3 表示第一个元素是长度为 3 的字符串 "SET"
    • $3 表示第二个元素是长度为 3 的字符串 "key".
    • $5 表示第三个元素是长度为 5 的字符串 "value"

2. GET

获取指定键的值。

  • 命令格式

    *2
    $3
    GET
    $3
    key
    
  • 解释

    • *2 表示接下来有 2 个元素。
    • $3 表示第一个元素是长度为 3 的字符串 "GET".
    • $3 表示第二个元素是长度为 3 的字符串 "key".

3. DEL

删除一个或多个键。

  • 命令格式

    *3
    $3
    DEL
    $3
    key1
    $3
    key2
    
  • 解释

    • *3 表示接下来有 3 个元素。
    • $3 表示第一个元素是长度为 3 的字符串 "DEL".
    • $3 表示第二个元素是长度为 3 的字符串 "key1".
    • $3 表示第三个元素是长度为 3 的字符串 "key2".

4. INCR

将键存储的数字值增加 1。

  • 命令格式

    *2
    $4
    INCR
    $3
    key
    
  • 解释

    • *2 表示接下来有 2 个元素。
    • $4 表示第一个元素是长度为 4 的字符串 "INCR".
    • $3 表示第二个元素是长度为 3 的字符串 "key".

5. DECR

将键存储的数字值减少 1。

  • 命令格式

    *2
    $4
    DECR
    $3
    key
    
  • 解释

    • *2 表示接下来有 2 个元素。
    • $4 表示第一个元素是长度为 4 的字符串 "DECR".
    • $3 表示第二个元素是长度为 3 的字符串 "key".

6. EXPIRE

设置键的过期时间(秒)。

  • 命令格式

    *3
    $7
    EXPIRE
    $3
    key
    $2
    60
    
  • 解释

    • *3 表示接下来有 3 个元素。
    • $7 表示第一个元素是长度为 7 的字符串 "EXPIRE".
    • $3 表示第二个元素是长度为 3 的字符串 "key".
    • $2 表示第三个元素是长度为 2 的字符串 "60".

7. TTL

获取键的剩余生存时间(秒)。

  • 命令格式

    *2
    $3
    TTL
    $3
    key
    
  • 解释

    • *2 表示接下来有 2 个元素。
    • $3 表示第一个元素是长度为 3 的字符串 "TTL".
    • $3 表示第二个元素是长度为 3 的字符串 "key".

8. HSET

设置哈希表中字段的值。

  • 命令格式

    *4
    $4
    HSET
    $3
    hash
    $3
    field
    $5
    value
    
  • 解释

    • *4 表示接下来有 4 个元素。
    • $4 表示第一个元素是长度为 4 的字符串 "HSET".
    • $3 表示第二个元素是长度为 3 的字符串 "hash".
    • $3 表示第三个元素是长度为 3 的字符串 "field".
    • $5 表示第四个元素是长度为 5 的字符串 "value".

9. HGET

获取哈希表中字段的值。

  • 命令格式

    *3
    $4
    HGET
    $3
    hash
    $5
    field
    
  • 解释

    • *3 表示接下来有 3 个元素。
    • $4 表示第一个元素是长度为 4 的字符串 "HGET".
    • $3 表示第二个元素是长度为 3 的字符串 "hash".
    • $5 表示第三个元素是长度为 5 的字符串 "field".

10. LPUSH

将一个或多个值插入列表头部。

  • 命令格式

    *3
    $5
    LPUSH
    $5
    mylist
    $4
    item
    
  • 解释

    • *3 表示接下来有 3 个元素。
    • $5 表示第一个元素是长度为 5 的字符串 "LPUSH".
    • $5 表示第二个元素是长度为 5 的字符串 "mylist".
    • $4 表示第三个元素是长度为 4 的字符串 "item".

11. LRANGE

获取列表中指定范围的元素。

  • 命令格式

    *4
    $6
    LRANGE
    $5
    mylist
    $1
    0
    $1
    1
    
  • 解释

    • *4 表示接下来有 4 个元素。
    • $6 表示第一个元素是长度为 6 的字符串 "LRANGE".
    • $5 表示第二个元素是长度为 5 的字符串 "mylist".
    • $1 表示第三个元素是长度为 1 的字符串 "0".
    • $1 表示第四个元素是长度为 1 的字符串 "1".

测试与验证

你可以使用 redis-cli 来测试这些新实现的命令:

# 测试 DEL
redis-cli -p 6379 SET key1 "value1"
redis-cli -p 6379 SET key2 "value2"
redis-cli -p 6379 DEL key1 key2

# 测试 INCR 和 DECR
redis-cli -p 6379 SET counter 10
redis-cli -p 6379 INCR counter
redis-cli -p 6379 DECR counter

# 测试 EXPIRE 和 TTL
redis-cli -p 6379 SET tempKey "tempValue"
redis-cli -p 6379 EXPIRE tempKey 60
redis-cli -p 6379 TTL tempKey

# 测试 HSET 和 HGET
redis-cli -p 6379 HSET myhash field1 "Hello"
redis-cli -p 6379 HGET myhash field1

# 测试 LPUSH 和 LRANGE
redis-cli -p 6379 LPUSH mylist item1 item2 item3
redis-cli -p 6379 LRANGE mylist 0 2

通过这些测试命令,你可以验证你的服务器是否正确实现了这些 Redis 命令。如果有任何问题,请检查日志输出并进行相应的调试。