Redis常用命令
🔑 一、通用键(key)操作
命令
命令
说明
keys pattern
查找所有符合给定模式的 key(生产环境慎用 )
exists key
判断 key 是否存在
del key [key ...]
删除一个或多个 key
type key
返回 key 所储存值的数据类型
expire key seconds
设置 key 的过期时间(秒)
pexpire key milliseconds
设置 key 的过期时间(毫秒)
ttl key
查看 key 的剩余生存时间(秒,-1 表示永不过期,-2 表示已过期)
pttl key
查看 key 的剩余生存时间(毫秒)
rename key newkey
重命名 key
flushdb
清空当前数据库
flushall
清空所有数据库
Demo
复制代码
# 设置几个测试 key
set user:1001 "Alice"
set session:abc123 "logged_in"
hset profile:1001 name "Alice" age 30
# 查看所有 key(仅用于本地练习)
keys *
# 判断 key 是否存在
exists user:1001 # 返回 1
exists user:9999 # 返回 0
# 设置过期时间(5 秒后自动删除)
expire user:1001 5
ttl user:1001 # 查看剩余秒数(如 4, 3...)
# 等待几秒后再查
get user:1001 # 可能返回 (nil)
# 删除 key
del session:abc123
exists session:abc123 # 返回 0
# 查看 key 类型
type profile:1001 # 返回 hash
type user:1001 # 若已过期则返回 none
# 清空当前库(谨慎!)
flushdb
📄 二、字符串(string)
命令
命令
说明
`set key value [ex seconds] [px milliseconds] [nx
xx]`
get key
获取字符串值
mset key value [key value ...]
批量设置多个 key-value
mget key [key ...]
批量获取多个 key 的值
incr key
将 key 中存储的数字值加 1
decr key
将 key 中存储的数字值减 1
incrby key increment
增加指定整数值
decrby key decrement
减少指定整数值
append key value
追加字符串到 key 对应值的末尾
strlen key
获取字符串长度
Demo
复制代码
# 基本 set/get
set username "tom"
get username # "tom"
# 带过期时间(10 秒)
set token "abcxyz" ex 10
ttl token # 查看过期时间
# 批量操作
mset city:beijing "北京" city:shanghai "上海"
mget city:beijing city:shanghai city:guangzhou # 第三个返回 nil
# 计数器
set counter 10
incr counter # 11
decr counter # 10
incrby counter 5 # 15
decrby counter 3 # 12
# 字符串追加
set msg "Hello"
append msg ", Redis!" # 返回新长度 13
get msg # "Hello, Redis!"
# 获取长度
strlen msg # 13
🧱 三、哈希(hash)
命令
命令
说明
hset key field value
设置 hash 字段的值
hget key field
获取 hash 字段的值
hmset key field value [field value ...]
批量设置 hash 字段(Redis 4.0+ 可直接用 hset)
hmget key field [field ...]
批量获取 hash 字段的值
hgetall key
获取 hash 中所有字段和值
hdel key field [field ...]
删除 hash 中一个或多个字段
hexists key field
判断 hash 中字段是否存在
hlen key
获取 hash 中字段数量
hkeys key
获取 hash 中所有字段名
hvals key
获取 hash 中所有字段值
Demo
复制代码
# 设置用户信息
hset user:2001 name "Jerry" email "jerry@example.com" age 25
# 获取单个字段
hget user:2001 name # "Jerry"
# 批量获取
hmget user:2001 name age email
# 获取所有字段和值
hgetall user:2001
# 检查字段是否存在
hexists user:2001 phone # 0(不存在)
hexists user:2001 name # 1
# 获取字段数量
hlen user:2001 # 3
# 获取所有字段名 / 值
hkeys user:2001 # ["name","email","age"]
hvals user:2001 # ["Jerry","jerry@example.com","25"]
# 删除字段
hdel user:2001 age
hlen user:2001 # 2
📋 四、列表(list)
命令
命令
说明
lpush key value [value ...]
从列表左侧插入元素
rpush key value [value ...]
从列表右侧插入元素
lpop key
弹出并返回列表左侧第一个元素
rpop key
弹出并返回列表右侧第一个元素
lrange key start stop
获取列表指定范围的元素(如 lrange key 0 -1 获取全部)
lindex key index
获取列表指定索引位置的元素
llen key
获取列表长度
lrem key count value
移除列表中与 value 相等的元素(count 控制方向和数量)
ltrim key start stop
保留指定范围内的元素,其余删除
Demo
复制代码
# 从左侧插入(队列头部)
lpush news "头条新闻A"
lpush news "头条新闻B" # B 在 A 前面
# 从右侧插入(队列尾部)
rpush news "地方新闻C"
# 查看全部(索引 0 到 -1)
lrange news 0 -1 # ["头条新闻B", "头条新闻A", "地方新闻C"]
# 弹出元素
lpop news # 返回 "头条新闻B"
rpop news # 返回 "地方新闻C"
# 当前列表只剩一个元素
lrange news 0 -1 # ["头条新闻A"]
# 其他操作
llen news # 1
lindex news 0 # "头条新闻A"
# 追加重复项并移除
rpush logs "error" "info" "error" "debug"
lrem logs 1 "error" # 从左往右删 1 个 "error"
lrange logs 0 -1 # ["info", "error", "debug"]
# 保留最新 2 条日志
rpush activity "login" "view" "edit" "logout"
ltrim activity -2 -1 # 保留最后 2 个
lrange activity 0 -1 # ["edit", "logout"]
🧩 五、集合(set)
命令
命令
说明
sadd key member [member ...]
向集合添加一个或多个成员
smembers key
获取集合所有成员
sismember key member
判断成员是否在集合中
scard key
获取集合成员数量
srem key member [member ...]
移除集合中的一个或多个成员
sinter key [key ...]
返回多个集合的交集
sunion key [key ...]
返回多个集合的并集
sdiff key [key ...]
返回第一个集合与其他集合的差集
Demo
复制代码
# 添加标签
sadd user:3001:tags "java" "redis" "web"
sadd user:3002:tags "python" "redis" "ai"
# 查看所有标签
smembers user:3001:tags # 无序,如 ["web","java","redis"]
# 判断是否包含
sismember user:3001:tags "mysql" # 0
sismember user:3001:tags "java" # 1
# 成员数量
scard user:3001:tags # 3
# 求交集:共同技能
sinter user:3001:tags user:3002:tags # ["redis"]
# 求并集:所有技能
sunion user:3001:tags user:3002:tags # ["java","web","python","ai","redis"]
# 求差集:3001 有但 3002 没有的
sdiff user:3001:tags user:3002:tags # ["java","web"]
# 移除标签
srem user:3001:tags "web"
smembers user:3001:tags # ["java","redis"]
📊 六、有序集合(sorted set / zset)
命令
命令
说明
zadd key score member [score member ...]
添加成员到有序集合(带分数)
zrange key start stop [withscores]
按分数从小到大返回成员(可选带分数)
zrevrange key start stop [withscores]
按分数从大到小返回成员
zscore key member
获取成员的分数
zrem key member [member ...]
移除有序集合中的成员
zcard key
获取有序集合成员数量
zrank key member
获取成员的排名(分数从小到大)
zrevrank key member
获取成员的排名(分数从大到小)
zincrby key increment member
给成员的分数增加 increment
zrangebyscore key min max [withscores] [limit offset count]
按分数范围查询成员
Demo
复制代码
# 添加排行榜数据(分数 + 成员)
zadd leaderboard 100 "Alice"
zadd leaderboard 150 "Bob"
zadd leaderboard 120 "Charlie"
# 正序查看(分数低 → 高)
zrange leaderboard 0 -1 # ["Alice", "Charlie", "Bob"]
zrange leaderboard 0 -1 withscores # 带分数
# 逆序查看(高分在前,常用于排行榜)
zrevrange leaderboard 0 -1 withscores
# 获取某人分数
zscore leaderboard "Bob" # "150"
# 获取排名(从 0 开始,正序)
zrank leaderboard "Charlie" # 1
zrevrank leaderboard "Charlie" # 1(逆序排名:Bob=0, Charlie=1, Alice=2)
# 增加分数(如 Bob 得了 10 分)
zincrby leaderboard 10 "Bob" # 返回 "160.0"
# 查询分数在 110 到 200 之间的成员
zrangebyscore leaderboard 110 200 withscores
# 获取总人数
zcard leaderboard # 3
# 删除成员
zrem leaderboard "Alice"
zcard leaderboard # 2
🛠️ 七、服务器与事务相关
命令
命令
说明
info
查看 Redis 服务器信息和统计
select index
切换数据库(默认 0--15)
ping
测试连接是否存活(返回 "PONG")
echo message
返回给定字符串
multi
开启事务
exec
执行事务中的所有命令
discard
取消事务
watch key [key ...]
监视一个或多个 key,用于实现乐观锁
Demo
复制代码
# 测试连接
ping # 返回 PONG
# 查看服务器信息(部分)
info server # 显示 Redis 版本等
info memory # 内存使用情况
# 切换数据库(默认是 0)
select 1
set test "in db1"
select 0
get test # (nil)
select 1
get test # "in db1"
select 0 # 切回
# 事务示例
multi
set tx:key1 "A"
set tx:key2 "B"
exec
get tx:key1 # "A"
get tx:key2 # "B"
# 乐观锁示例(模拟并发)
set balance 100
watch balance
multi
# 此时如果其他客户端修改了 balance,exec 会失败
decrby balance 20
exec # 若未被修改,返回 ["OK"];否则返回 nil
💡 Java Web 开发小贴士
推荐使用 Spring Data Redis + Lettuce (非阻塞、支持响应式)。
避免在代码中直接使用 keys *,改用 scan 遍历。
缓存穿透:用 setnx 或布隆过滤器防护。
分布式锁:建议使用 Redisson 的 RLock,避免手写逻辑出错。
大 key(如超长 list/hash)会影响性能,需定期监控和拆分。