Redis常用命令
注意:
[]表示可选参数;|表示"或";...表示可重复。
字符串命令
设置
SET key value [EX seconds | PX milliseconds] [NX|XX]
EX seconds:设置过期时间,单位秒。PX milliseconds:设置过期时间,单位毫秒。NX:仅当键不存在时设置。XX:仅当键已存在时设置。
示例:
bash
# 1. 设置一个10秒后过期的锁,仅在锁不存在时设置
SET distributed_lock "owner_1" EX 10 NX # 返回:OK (表示设置成功,获得了锁)
# 2. 键已存在时,使用XX条件更新值并重置过期时间
SET user_session:abc "new_data" EX 3600 XX # 返回:OK (表示更新成功)
# 3. 使用NX条件时,如果键已存在,则操作失败
SET distributed_lock "owner_2" EX 10 NX # 返回:(nil) (表示设置失败,锁已被他人持有)
获取
GET key:获取键对应的字符串值。
bash
TTL distributed_lock # (integer) -2
GET distributed_lock # 返回:(nil) (表示已过期被删除了)
批量
MSET key value [key value ...] / MGET key [key ...]:批量设置/获取。
bash
MSET k1 "v1" k2 "v2"
# 返回:OK
MGET k1 k2 k3
# 返回:1) "v1" 2) "v2" 3) (nil) # 不存在的键返回 nil
删除
DEL key:删除某个键。
变更
INCR key / DECR key: 将键的整数值加一/减一。
bash
SET count 10
INCR count
# 返回:(integer) 11
列表命令
设置
LPUSH key element [element ...]
RPUSH key element [element ...]
示例:
bash
LPUSH tasks "task1" "task2" "task3"
获取
LRANGE key start stop
示例:
bash
LRANGE news 0 9 # 获取列表前10个元素
哈希表命令
设置
HSET key field value [field value ...]
示例:
bash
HSET user:1000 name "Alice" age 30 email "alice@example.com"
获取
HGET key field
bash
HGET user:1000 name # "Alice"
HGET user:1000 sex # (nil)
批量
HMGET key field [field ...]
bash
HMGET user:1000 age name
# 1) "30"
# 2) "Alice"
HGETALL key
bash
HGETALL user:1000
# 1) "name"
# 2) "Alice"
# 3) "age"
# 4) "30"
# 5) "email"
# 6) "alice@example.com"
删除
HDEL key field [field ...]
bash
HDEL user:1000 "name"
# (integer) 1
HGETALL user:1000
# 1) "age"
# 2) "30"
# 3) "email"
# 4) "alice@example.com"
变更
HINCRBY key field increment:为指定字段的整数值 增加 increment(可为负)。
bash
HINCRBY user:1000 age 10
# (integer) 40
HGETALL user:1000
# 1) "age"
# 2) "40"
# 3) "email"
# 4) "alice@example.com"
集合命令
设置
SADD key member [member ...]
示例:
bash
# 1. 向标签集合添加元素
SADD tags:post "Redis" "Database" "Cache"
# 返回:(integer) 3
# 2. 再创建一个集合
SADD my_fav "Redis" "Go" "Python"
# 返回:(integer) 3
获取
SINTER set1 set2:返回给定集合的交集。
bash
# 3. 求两个集合的交集(共同喜爱的技术)
SINTER tags:post my_fav
# 返回:
# 1) "Redis" (两个集合中都存在 "Redis")
SUNION set1 set2:返回给定集合的并集。
bash
SUNION tags:post my_fav
# 1) "Redis"
# 2) "Cache"
# 3) "Database"
# 4) "Python"
# 5) "Go"
SMEMBERS key:查找集合中的所有元素。
bash
SMEMBERS my_fav
# 1) "Python"
# 2) "Go"
# 3) "Redis"
``SISMEMBER key member`:查询中是否存在元素member。
bash
SISMEMBER my_fav "Python"
# (integer) 1
SISMEMBER my_fav "Cache"
# (integer) 0
删除
SREM key member [member ...]:删除集合中的某个元素。
bash
SMEMBERS my_fav
# 1) "Python"
# 2) "Go"
# 3) "Redis"
SREM my_fav "Go"
# (integer) 1
SMEMBERS my_fav
# 1) "Python"
# 2) "Redis"
有序集合命令
设置
ZADD key [NX|XX] [CH] [INCR] score member [score member ...]
NX:仅添加新成员,不更新已存在成员的分数。XX:仅更新已存在成员的分数,不添加新成员。CH:返回被更改(新增或更新)的成员数量,而非全部新增数量。INCR:将score视为增量(类似ZINCRBY)。
示例:
bash
ZADD leaderboard NX 80 "NewPlayer" # 仅当NewPlayer不存在时才添加
ZADD leaderboard INCR 5 "Alice" # 给Alice的分数增加5
获取
ZRANGE/ZREVRANGE key start stop [withscores]
- ZRANGE:顺序输出(按分数升序)
- ZREVRANGE:逆序输出(按分数降序)
-
start, stop\]是闭区间。
获取所有元素
zrange tables 0 -1
1) "t5"
2) "t4"
3) "t1"
4) "t3"
5) "t2"
6) "t6"
zrange tables 0 -1 withscores # 顺序输出
1) "t5"
2) "59"
3) "t4"
4) "80"
5) "t1"
6) "90"
7) "t3"
8) "90"
9) "t2"
#10) "92"
#11) "t6"
#12) "99"
zrevrange tables 0 -1 withscores # 逆序输出
1) "t6"
2) "99"
3) "t2"
4) "92"
5) "t3"
6) "90"
7) "t1"
8) "90"
9) "t4"
#10) "80"
#11) "t5"
#12) "59"
`ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]`
```bash
zrangebyscore tables 90 100
# 1) "t1"
# 2) "t3"
# 3) "t2"
# 4) "t6"
zrangebyscore tables 90 100 withscores
# 1) "t1"
# 2) "90"
# 3) "t3"
# 4) "90"
# 5) "t2"
# 6) "92"
# 7) "t6"
# 8) "99"
通用键管理命令
查找key
KEYS pattern: 查找匹配模式的键(生产环境慎用 ,推荐SCAN)。
bash
KEYS user:*
# 可能返回:
# 1) "user:1000"
# 2) "user:1001"
删除键
DEL key [key ...]: 删除键。
bash
SET temp "data"
DEL temp
# 返回:(integer) 1 # 成功删除1个
检查键是否存在
bash
EXISTS username
# 返回:(integer) 1 # 存在
查看key的类型
bash
TYPE user:1000
# 返回:hash
续约命令
设置键的过期时间
bash
EXPIRE username 300
# 返回:(integer) 1 # 设置成功
查看剩余生存时间
bash
EXPIRE username 300
# 返回:(integer) 1 # 设置成功