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"]
- 注意事项:需指定
BEFORE
或AFTER
。 - 推荐使用:精确插入元素。
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)
- 注意事项:不存在的字段忽略。
- 推荐使用:清理字段。