Redis常用命令

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 或布隆过滤器防护。
  • 分布式锁:建议使用 RedissonRLock,避免手写逻辑出错。
  • 大 key(如超长 list/hash)会影响性能,需定期监控和拆分。

相关推荐
Tiger_shl1 小时前
SqlConnection、SqlCommand 和 SqlDataAdapter
开发语言·数据库·c#
h***93662 小时前
【MySQL数据库】Ubuntu下的mysql
数据库·mysql·ubuntu
正在走向自律2 小时前
豆包编程模型Doubao-Seed-Code深度体验,从零开始构建全栈项目的完整指南
java·服务器·数据库·doubao·claude code·火山方舟
h***8562 小时前
MySQL数据分析
数据库·mysql
倔强的石头_2 小时前
从海量时序数据到无人值守:数据库在新能源集控系统中的架构实践
数据库
合作小小程序员小小店2 小时前
web网页开发,在线%医院诊断管理%系统,基于Idea,html,css,jQuery,java,jsp,ssh,mysql。
java·前端·css·数据库·jdk·html·intellij-idea
Alita11101_2 小时前
深度测评:openGauss 在虚拟机中对 SQL92 标准的兼容性
数据库
w***95492 小时前
【Redis】centos7 systemctl 启动 Redis 失败
数据库·redis·缓存
g***72702 小时前
Spring Boot 整合 Redis 步骤详解
spring boot·redis·bootstrap