1. Redis服务器和客户端命令

redis-server

  • 作用:启动Redis服务器。
  • 返回值:无直接返回值,启动成功后进入运行状态。
  • 示例

    redis-server                          # 使用默认配置启动
    redis-server /etc/redis/redis.conf    # 指定配置文件启动
    redis-server --port 6380              # 指定端口启动
  • 注意事项:可在后台运行,使用--daemonize yes参数,避免阻塞终端。
  • 推荐使用:部署Redis服务时使用,确保配置文件路径正确。

redis-cli

  • 作用:启动Redis命令行客户端,与服务器交互。
  • 返回值:无直接返回值,进入交互模式。
  • 示例

    redis-cli                          # 连接本地默认服务器127.0.0.1:6379
    redis-cli -h 192.168.1.100 -p 6380 # 连接指定主机和端口
    redis-cli -a mypassword            # 使用密码连接
  • 注意事项:确保服务器已启动,默认连接本地6379端口。
  • 推荐使用:调试或手动操作Redis时使用。

2. 通用命令

这些命令适用于所有键,不限定特定数据类型,主要用于管理键的元信息(如存在性、类型、过期时间等)。

keys

  • 作用:查找匹配模式的键。
  • 返回值:匹配的键列表,空列表表示无匹配键。
  • 示例

    keys *             # 返回所有键,如 ["key1", "key2", "user:1"]
    keys user:*        # 返回以“user:”开头的键,如 ["user:1", "user:2"]
    keys abc           # 返回精确匹配“abc”的键,如 ["abc"]
  • 注意事项:生产环境慎用,会扫描整个键空间,影响性能。
  • 推荐使用:调试或小规模数据时使用。
  • 替代命令

    • 命令SCAN
    • 作用:逐步扫描键空间,避免性能问题。
    • 示例SCAN 0 MATCH user:* COUNT 10
    • 说明:更适合大数据量场景。

type

  • 作用:返回键的数据类型。
  • 返回值string, list, set, zset, hash, none(键不存在)。
  • 示例

    set mykey "hello"
    type mykey         # 返回 "string"
    lpush mylist 1
    type mylist        # 返回 "list"
    type nonexistent   # 返回 "none"
  • 注意事项:仅返回类型,不涉及值。
  • 推荐使用:检查键类型以避免操作错误。

exists

  • 作用:检查键是否存在。
  • 返回值

    • 1:存在。
    • 0:不存在。
  • 示例

    set mykey "hello"
    exists mykey       # 返回 1
    exists nonexistent # 返回 0
  • 注意事项:性能开销低。
  • 推荐使用:在操作键前验证其存在性。

del

  • 作用:删除一个或多个键。
  • 返回值:删除的键数量。
  • 示例

    set key1 "v1"
    set key2 "v2"
    del key1           # 返回 1
    del key2 key3      # 返回 1(key3不存在)
    del nonexistent    # 返回 0
  • 注意事项:键不存在时不报错,返回0。
  • 推荐使用:清理无用数据。

expire

  • 作用:设置键的过期时间(单位:秒)。
  • 返回值

    • 1:设置成功。
    • 0:键不存在或无法设置。
  • 示例

    set mykey "hello"
    expire mykey 60    # 返回 1,60秒后过期
    expire nonexistent 10  # 返回 0
  • 注意事项:覆盖原有过期时间。
  • 推荐使用:实现临时数据存储。

ttl

  • 作用:返回键的剩余生存时间(单位:秒)。
  • 返回值

    • 正整数:剩余秒数。
    • -1:无过期时间。
    • -2:键不存在。
  • 示例

    set mykey "hello"
    expire mykey 60
    ttl mykey          # 返回 60(或稍少)
    set permkey "hi"
    ttl permkey        # 返回 -1
    ttl nonexistent    # 返回 -2
  • 注意事项:常与expire配合使用。
  • 推荐使用:检查键的有效期。

persist

  • 作用:移除键的过期时间,使其永久存在。
  • 返回值

    • 1:成功移除。
    • 0:键不存在或无过期时间。
  • 示例

    set mykey "hello"
    expire mykey 60
    persist mykey      # 返回 1
    persist permkey    # 返回 0(无过期时间)
  • 注意事项:对无过期时间的键无影响。
  • 推荐使用:将临时键转为永久键。

rename

  • 作用:重命名键。
  • 返回值

    • OK:成功。
    • 错误:键不存在。
  • 示例

    set oldkey "value"
    rename oldkey newkey  # 返回 "OK",oldkey变为newkey
    get newkey            # 返回 "value"
  • 注意事项:若newkey已存在,会被覆盖。
  • 推荐使用:调整键名时使用。

3. 字符串(String)命令

字符串是Redis最基本的数据类型,可存储文本、数字或二进制数据,适合简单的键值对操作。

set

  • 作用:设置键的值。
  • 返回值OK
  • 示例

    set mykey "hello"     # 返回 "OK"
    set mykey "world"     # 返回 "OK",覆盖旧值
    set counter 100       # 返回 "OK",存储数字
  • 注意事项:键存在时覆盖旧值。
  • 推荐使用:存储简单数据。

get

  • 作用:获取键的值。
  • 返回值

    • 字符串值:键存在。
    • nil:键不存在。
  • 示例

    set mykey "hello"
    get mykey             # 返回 "hello"
    get nonexistent       # 返回nil
  • 注意事项:仅适用于字符串类型。
  • 推荐使用:读取单个值。

mset

  • 作用:同时设置多个键值对。
  • 返回值OK
  • 示例

    mset key1 "v1" key2 "v2"  # 返回 "OK"
    get key1                  # 返回 "v1"
    get key2                  # 返回 "v2"
  • 注意事项:覆盖已有键的值。
  • 推荐使用:批量设置提高效率。

mget

  • 作用:同时获取多个键的值。
  • 返回值:值列表,未找到的键返回nil
  • 示例

    mset key1 "v1" key2 "v2"
    mget key1 key2 key3       # 返回 ["v1", "v2", nil]
  • 注意事项:返回的结果顺序与输入一致。
  • 推荐使用:批量读取减少请求。

append

  • 作用:将值追加到键的现有值后。
  • 返回值:追加后字符串长度。
  • 示例

    set mykey "hello"
    append mykey " world"     # 返回 11
    get mykey                 # 返回 "hello world"
    append newkey "start"     # 返回 5(键不存在时新建)
  • 注意事项:键不存在时等同于set
  • 推荐使用:扩展字符串内容。

decr

  • 作用:将键的整数值减1。
  • 返回值:减1后的值。
  • 示例

    set counter 10
    decr counter              # 返回 9
    decr newcounter           # 返回 -1(键不存在时从0开始)
  • 注意事项

    • 键不存在:初始值0,减1后为-1。
    • 非整数值:报错。
  • 推荐使用:计数器递减。

incr

  • 作用:将键的整数值加1。
  • 返回值:加1后的值。
  • 示例

    set counter 10
    incr counter              # 返回 11
    incr newcounter           # 返回 1(键不存在时从0开始)
  • 注意事项

    • 键不存在:初始值0,加1后为1。
    • 非整数值:报错。
  • 推荐使用:计数器递增。

strlen

  • 作用:返回键值的字符串长度。
  • 返回值

    • 整数:长度。
    • 0:键不存在。
  • 示例

    set mykey "hello"
    strlen mykey              # 返回 5
    strlen nonexistent        # 返回 0
  • 注意事项:仅适用于字符串类型。
  • 推荐使用:检查字符串长度。

setex

  • 作用:设置键值并指定过期时间(单位:秒)。
  • 返回值OK
  • 示例

    setex mykey 10 "hello"    # 返回 "OK",10秒后过期
    get mykey                 # 返回 "hello"
    ttl mykey                 # 返回 10(或稍少)
  • 注意事项:覆盖旧值和过期时间。
  • 推荐使用:创建带过期时间的临时数据。

4. 列表(List)命令

列表是一个有序、可重复的元素集合,基于双向链表实现,适合队列或栈场景。

lpush

  • 作用:从列表左侧(头部)插入元素。
  • 返回值:插入后列表长度。
  • 示例

    lpush mylist "a"          # 返回 1
    lpush mylist "b" "c"      # 返回 3
    lrange mylist 0 -1        # 返回 ["c", "b", "a"]
  • 注意事项:键不存在时创建新列表。
  • 推荐使用:实现栈或左侧队列。

lrange

  • 作用:获取列表指定范围的元素。
  • 返回值:元素列表。
  • 示例

    lpush mylist "a" "b" "c"
    lrange mylist 0 1         # 返回 ["c", "b"]
    lrange mylist 0 -1        # 返回 ["c", "b", "a"]
  • 注意事项:索引从0开始,-1表示末尾。
  • 推荐使用:读取列表内容。

rpush

  • 作用:从列表右侧(尾部)插入元素。
  • 返回值:插入后列表长度。
  • 示例

    rpush mylist "a"          # 返回 1
    rpush mylist "b" "c"      # 返回 3
    lrange mylist 0 -1        # 返回 ["a", "b", "c"]
  • 注意事项:键不存在时创建新列表。
  • 推荐使用:实现队列或右侧追加。

linsert

  • 作用:在指定元素前后插入新元素。
  • 返回值

    • 插入后长度:成功。
    • -1:指定元素不存在。
  • 示例

    rpush mylist "a" "b" "c"
    linsert mylist BEFORE "b" "x"  # 返回 4
    lrange mylist 0 -1             # 返回 ["a", "x", "b", "c"]
  • 注意事项:需指定BEFOREAFTER
  • 推荐使用:精确插入元素。

lindex

  • 作用:获取指定索引的元素。
  • 返回值

    • 元素值:存在。
    • nil:索引超出范围或键不存在。
  • 示例

    rpush mylist "a" "b" "c"
    lindex mylist 1           # 返回 "b"
    lindex mylist 10          # 返回 (nil)
  • 注意事项:索引从0开始。
  • 推荐使用:访问特定位置元素。

llen

  • 作用:返回列表长度。
  • 返回值

    • 整数:长度。
    • 0:键不存在。
  • 示例

    rpush mylist "a" "b"
    llen mylist               # 返回 2
    llen nonexistent          # 返回 0
  • 注意事项:性能高效。
  • 推荐使用:检查列表大小。

lset

  • 作用:设置指定索引的值。
  • 返回值

    • OK:成功。
    • 错误:索引超范围或键不存在。
  • 示例

    rpush mylist "a" "b" "c"
    lset mylist 1 "x"         # 返回 "OK"
    lrange mylist 0 -1        # 返回 ["a", "x", "c"]
  • 注意事项:索引必须有效。
  • 推荐使用:修改列表元素。

lrem

  • 作用:移除指定数量的匹配元素。
  • 返回值:移除的元素数量。
  • 示例

    rpush mylist "a" "b" "a" "c"
    lrem mylist 2 "a"         # 返回 2
    lrange mylist 0 -1        # 返回 ["b", "c"]
  • 注意事项:count为0时移除所有匹配。
  • 推荐使用:清理重复元素。

5. 集合(Set)命令

集合是无序、不重复的元素集合,适合成员关系检查和集合运算。

sadd

  • 作用:向集合添加元素。
  • 返回值:成功添加的元素数量。
  • 示例

    sadd myset "a"            # 返回 1
    sadd myset "b" "a"        # 返回 1("a"已存在)
  • 注意事项:重复元素会被忽略。
  • 推荐使用:添加唯一元素。

smembers

  • 作用:返回集合所有元素。
  • 返回值:元素列表。
  • 示例

    sadd myset "a" "b" "c"
    smembers myset            # 返回 ["a", "b", "c"]
  • 注意事项:无序输出。
  • 推荐使用:查看集合内容。

sinter

  • 作用:返回多个集合的交集。
  • 返回值:交集元素列表。
  • 示例

    sadd set1 "a" "b" "c"
    sadd set2 "b" "c" "d"
    sinter set1 set2          # 返回 ["b", "c"]
  • 注意事项:至少两个集合。
  • 推荐使用:查找共同元素。

sdiff

  • 作用:返回第一个集合与第二个集合的差集,但只包含第一个集合的值。
  • 返回值:差集元素列表。
  • 示例

    sadd set1 "a" "b" "c"
    sadd set2 "b" "d"
    sdiff set1 set2           # 返回 ["a", "c"]
  • 注意事项:顺序影响结果。
  • 推荐使用:查找独有元素。

sunion

  • 作用:返回多个集合的并集。
  • 返回值:并集元素列表。
  • 示例

    sadd set1 "a" "b"
    sadd set2 "b" "c"
    sunion set1 set2          # 返回 ["a", "b", "c"]
  • 注意事项:自动去重。
  • 推荐使用:合并集合。

spop

  • 作用:随机移除并返回一个元素。
  • 返回值:移除的元素。
  • 示例

    sadd myset "a" "b" "c"
    spop myset                # 返回 "b"(随机)
    smembers myset            # 返回 ["a", "c"]
  • 注意事项:集合为空时返回nil
  • 推荐使用:随机抽取元素。

srem

  • 作用:移除集合中的指定元素。
  • 返回值:移除的元素数量。
  • 示例

    sadd myset "a" "b" "c"
    srem myset "b" "d"        # 返回 1("d"不存在)
  • 注意事项:不存在的元素忽略。
  • 推荐使用:删除特定元素。

sismember

  • 作用:检查元素是否在集合中。
  • 返回值

    • 1:存在。
    • 0:不存在。
  • 示例

    sadd myset "a" "b"
    sismember myset "a"       # 返回 1
    sismember myset "c"       # 返回 0
  • 注意事项:高效查询。
  • 推荐使用:验证成员关系。

srandmember

  • 作用:随机返回集合中的元素(不移除)。
  • 返回值:随机元素。
  • 示例

    sadd myset "a" "b" "c"
    srandmember myset         # 返回 "a"(随机)
  • 注意事项:可指定返回数量。
  • 推荐使用:随机选择元素。

smove

  • 作用:将元素从一个集合移动到另一个集合。
  • 返回值

    • 1:成功。
    • 0:元素不存在。
  • 示例

    sadd set1 "a" "b"
    sadd set2 "c"
    smove set1 set2 "a"       # 返回 1
    smembers set2             # 返回 ["c", "a"]
  • 注意事项:源集合会减少元素。
  • 推荐使用:元素迁移。

6. 有序集合(Sorted Set)命令

有序集合是有序、不重复的元素集合,每个元素关联一个分数,适合 排行榜或优先级队列。

zadd

  • 作用:添加元素及其分数。
  • 返回值:新增的元素数量。
  • 示例

    zadd myset 1 "a"          # 返回 1
    zadd myset 2 "b" 1 "a"    # 返回 1("a"已存在)
  • 注意事项:重复元素更新分数。
  • 推荐使用:构建排行榜。

zrevrange

  • 作用:按分数从高到低返回指定范围元素。
  • 返回值:元素列表。
  • 示例

    zadd myset 1 "a" 2 "b" 3 "c"
    zrevrange myset 0 1       # 返回 ["c", "b"]
  • 注意事项:索引从0开始。
  • 推荐使用:获取高分元素。

zcount

  • 作用:统计分数范围内的元素数量。
  • 返回值:数量。
  • 示例

    zadd myset 1 "a" 2 "b" 3 "c"
    zcount myset 1 2          # 返回 2
  • 注意事项:包含边界值。
  • 推荐使用:统计符合条件的元素。

zrank

  • 作用:返回元素从低到高的排名。
  • 返回值

    • 整数:排名(从0开始)。
    • nil:元素不存在。
  • 示例

    zadd myset 1 "a" 2 "b" 3 "c"
    zrank myset "b"           # 返回 1
  • 注意事项:分数低的排前面。
  • 推荐使用:查询排名。

zrevrank

  • 作用:返回元素从高到低的排名。
  • 返回值

    • 整数:排名。
    • nil:元素不存在。
  • 示例

    zadd myset 1 "a" 2 "b" 3 "c"
    zrevrank myset "b"        # 返回 1
  • 注意事项:分数高的排前面。
  • 推荐使用:查询逆序排名。

zscore

  • 作用:返回元素的分数。
  • 返回值

    • 分数值:存在。
    • nil:不存在。
  • 示例

    zadd myset 1 "a" 2 "b"
    zscore myset "a"          # 返回 "1"
  • 注意事项:返回字符串格式。
  • 推荐使用:查询元素分数。

zrem

  • 作用:移除指定元素。
  • 返回值:移除的元素数量。
  • 示例

    zadd myset 1 "a" 2 "b"
    zrem myset "a" "c"        # 返回 1("c"不存在)
  • 注意事项:不存在的元素忽略。
  • 推荐使用:删除元素。

7. 哈希(Hash)命令

哈希是一个键值对集合,适合存储对象,字段名唯一且内存占用少。

hset

  • 作用:设置哈希字段的值。
  • 返回值

    • 1:新增字段。
    • 0:更新字段。
  • 示例

    hset myhash name "Alice"  # 返回 1
    hset myhash name "Bob"    # 返回 0
  • 注意事项:字段存在时覆盖。
  • 推荐使用:存储对象属性。
  • 新功能说明:自Redis 4.0起,hset支持设置多个字段值。

    • 示例hset myhash name "Alice" age "25"

hmset

  • 作用:同时设置多个字段值。
  • 返回值OK
  • 示例

    hmset myhash name "Alice" age "25"  # 返回 "OK"
  • 注意事项:Redis 4.0+建议用hset替代。
  • 推荐使用:批量设置字段。
  • 替代命令

    • 命令hset
    • 作用:设置单个或多个字段值。
    • 示例hset myhash name "Alice" age "25"
    • 说明:功能更灵活,替代hmset

hget

  • 作用:获取字段值。
  • 返回值

    • 值:存在。
    • nil:不存在。
  • 示例

    hset myhash name "Alice"
    hget myhash name          # 返回 "Alice"
    hget myhash age           # 返回 (nil)
  • 注意事项:仅适用于哈希。
  • 推荐使用:读取单个字段。

hmget

  • 作用:获取多个字段值。
  • 返回值:值列表。
  • 示例

    hmset myhash name "Alice" age "25"
    hmget myhash name age     # 返回 ["Alice", "25"]
  • 注意事项:不存在的字段返回nil
  • 推荐使用:批量读取字段。

hgetall

  • 作用:返回所有字段和值。
  • 返回值:字段-值对列表。
  • 示例

    hmset myhash name "Alice" age "25"
    hgetall myhash            # 返回 ["name", "Alice", "age", "25"]
  • 注意事项:数据量大时性能较低。
  • 推荐使用:查看哈希全部内容。

hkeys

  • 作用:返回所有字段名。
  • 返回值:字段列表。
  • 示例

    hmset myhash name "Alice" age "25"
    hkeys myhash              # 返回 ["name", "age"]
  • 注意事项:键不存在返回空列表。
  • 推荐使用:获取字段名。

hvals

  • 作用:返回所有字段值。
  • 返回值:值列表。
  • 示例

    hmset myhash name "Alice" age "25"
    hvals myhash              # 返回 ["Alice", "25"]
  • 注意事项:无字段名。
  • 推荐使用:获取所有值。

hexists

  • 作用:检查字段是否存在。
  • 返回值

    • 1:存在。
    • 0:不存在。
  • 示例

    hset myhash name "Alice"
    hexists myhash name       # 返回 1
    hexists myhash age        # 返回 0
  • 注意事项:高效查询。
  • 推荐使用:验证字段存在性。

hlen

  • 作用:返回字段数量。
  • 返回值

    • 整数:数量。
    • 0:键不存在。
  • 示例

    hmset myhash name "Alice" age "25"
    hlen myhash               # 返回 2
  • 注意事项:性能高效。
  • 推荐使用:统计字段数。

hdel

  • 作用:删除指定字段。
  • 返回值:删除的字段数量。
  • 示例

    hmset myhash name "Alice" age "25"
    hdel myhash name          # 返回 1
    hget myhash name          # 返回 (nil)
  • 注意事项:不存在的字段忽略。
  • 推荐使用:清理字段。