Redis 常用命令总结

在日常开发中,Redis 作为高性能的键值存储数据库,被广泛应用于缓存、消息队列、排行榜等场景。本文总结了开发中最常用的 Redis 命令,帮助你快速查阅和使用。

一. 基础操作

1.1 连接与通用命令

markdown 复制代码
# 连接 Redis
redis-cli
redis-cli -h 127.0.0.1 -p 6379
redis-cli -a password

# 切换数据库
SELECT 0-15  # Redis 默认有16个数据库

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

# 查看 key 的数量
DBSIZE

# 查看服务器信息
INFO

# 测试连接
PING

1.2 Key 操作

bash 复制代码
# 设置键值对(带过期时间)
SET key value
SET key value EX 3600    # 3600秒后过期
SET key value PX 300000  # 300000毫秒后过期

# 获取值
GET key

# 删除 key
DEL key1 key2 key3

# 判断 key 是否存在
EXISTS key

# 设置过期时间
EXPIRE key 3600        # 3600秒后过期
EXPIREAT key 1700000000 # 指定时间戳过期

# 查看剩余过期时间
TTL key          # 返回秒
PTTL key         # 返回毫秒

# 移除过期时间
PERSIST key

# 重命名 key
RENAME oldkey newkey
RENAMENX oldkey newkey  # 仅当 newkey 不存在时重命名

# 查找 key
KEYS pattern      # KEYS user:*  (生产环境慎用)
SCAN cursor MATCH pattern COUNT count  # SCAN 0 MATCH user:* COUNT 10 (推荐)

# 查看 key 类型
TYPE key

二、String(字符串)

bash 复制代码
# 设置和获取
SET key value
GET key
MGET key1 key2 key3    # 批量获取
MSET key1 val1 key2 val2 # 批量设置

# 数值操作
INCR key          # 自增1
INCRBY key 10     # 自增指定值
DECR key          # 自减1
DECRBY key 10     # 自减指定值

# 字符串追加
APPEND key value  # 返回字符串长度

# 获取长度
STRLEN key

# 截取子串
GETRANGE key 0 -1  # 0到-1表示全部

# 设置指定位置的值
SETRANGE key offset value

三、Hash(哈希)

bash 复制代码
# 设置字段
HSET key field value
HMSET key field1 value1 field2 value2

# 获取字段
HGET key field
HMGET key field1 field2

# 获取所有字段和值
HGETALL key

# 删除字段
HDEL key field1 field2

# 判断字段是否存在
HEXISTS key field

# 获取所有字段名
HKEYS key

# 获取所有字段值
HVALS key

# 获取字段数量
HLEN key

# 数值操作
HINCRBY key field 10
HINCRBYFLOAT key field 10.5

四、List(列表)

bash 复制代码
# 添加元素(左侧)
LPUSH key value1 value2
LPUSHX key value  # 仅当列表存在时添加

# 添加元素(右侧)
RPUSH key value1 value2
RPUSHX key value

# 弹出元素
LPOP key  # 左侧弹出
RPOP key  # 右侧弹出

# 获取列表范围内的元素
LRANGE key 0 -1  # 获取全部
LRANGE key 0 10  # 获取前11个

# 获取列表长度
LLEN key

# 删除指定值的元素
LREM key count value  # count>0从头删,count<0从尾删,count=0全删

# 获取指定索引的元素
LINDEX key index

# 设置指定索引的元素
LSET key index value

# 列表修剪
LTRIM key 0 100  # 保留0-100的元素,其他删除

# 阻塞操作(实现消息队列)
BLPOP key1 key2 timeout
BRPOP key1 key2 timeout

五、Set(集合)

bash 复制代码
# 添加元素
SADD key member1 member2

# 获取所有元素
SMEMBERS key

# 删除元素
SREM key member1 member2

# 判断元素是否存在
SISMEMBER key member

# 获取集合大小
SCARD key

# 随机弹出元素
SPOP key [count]

# 随机获取元素(不删除)
SRANDMEMBER key [count]

# 集合运算
SINTER key1 key2 key3    # 交集
SUNION key1 key2 key3     # 并集
SDIFF key1 key2           # 差集(key1有key2没有)

# 集合运算并存储结果
SINTERSTORE dest key1 key2
SUNIONSTORE dest key1 key2
SDIFFSTORE dest key1 key2

六、ZSet(有序集合)

bash 复制代码
# 添加元素
ZADD key score1 member1 score2 member2

# 获取分数范围内的元素(升序)
ZRANGE key 0 -1
ZRANGE key 0 -1 WITHSCORES  # 带分数

# 获取分数范围内的元素(降序)
ZREVRANGE key 0 -1
ZREVRANGE key 0 -1 WITHSCORES

# 按分数范围获取
ZRANGEBYSCORE key min max
ZREVRANGEBYSCORE key max min

# 获取元素排名(升序)
ZRANK key member

# 获取元素排名(降序)
ZREVRANK key member

# 获取元素分数
ZSCORE key member

# 获取指定分数范围内的元素数量
ZCOUNT key min max

# 获取集合大小
ZCARD key

# 删除元素
ZREM key member1 member2

# 按排名删除
ZREMRANGEBYRANK key 0 5

# 按分数删除
ZREMRANGEBYSCORE key min max

# 增加分数
ZINCRBY key increment member

七、常用应用场景

7.1 缓存场景

bash 复制代码
# 设置缓存
SET cache:user:1001 '{"id":1001,"name":"张三"}' EX 3600

# 获取缓存
GET cache:user:1001

# 删除缓存
DEL cache:user:1001

7.2 计数器

bash 复制代码
# 文章阅读量
INCR article:1001:views

# 点赞数
INCR post:1001:likes

# 批量点赞计数
INCRBY post:1001:likes 10

7.3 分布式锁

bash 复制代码
# 获取锁
SET lock:resource UNIQUE_VALUE NX PX 30000

# 释放锁(Lua脚本保证原子性)
EVAL "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end" 1 lock:resource UNIQUE_VALUE

7.4 排行榜

bash 复制代码
# 添加分数
ZADD leaderboard 95 "player1" 87 "player2" 92 "player3"

# 获取前10名
ZREVRANGE leaderboard 0 9 WITHSCORES

# 获取玩家排名
ZREVRANK leaderboard "player1"

# 增加分数
ZINCRBY leaderboard 5 "player1"

7.5 消息队列

bash 复制代码
# 生产者(左侧入队)
LPUSH queue:task '{"id":1,"type":"email"}'

# 消费者(右侧出队,阻塞5秒)
BRPOP queue:task 5

7.6 用户标签

bash 复制代码
# 添加标签
SADD user:1001:tags "程序员" "技术控" "音乐迷"

# 获取标签
SMEMBERS user:1001:tags

# 判断标签是否存在
SISMEMBER user:1001:tags "程序员"

# 查找共同标签的用户(交集)
SINTER user:1001:tags user:1002:tags
相关推荐
时间静止不是简史1 小时前
生产事故排查:Redis 宕机导致补偿队列消费线程死亡,通话录音未上送业务平台
java·redis
2301_32241428044 小时前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
catoop7 小时前
API Key 设计与安全生成方案:结构拆解、数据库设计与 Java 实现
java·数据库·安全
Web极客码7 小时前
我用 Claude 分析 Redis 哨兵日志,实现跨机房数据不一致自动对齐
数据库·redis·php
库库的数据库笔记7 小时前
国产信创数据库的MySQL兼容性深度对比解析
大数据·数据库·mysql·oceanbase·政务
microrain7 小时前
SagooIoT 的缓存换后端只改一行配置,文件后端连 Redis 都不需要
物联网·缓存·golang·sagooiot
姚远Oracle ACE8 小时前
为什么无法连接到 PostgreSQL?
数据库·postgresql
ss2738 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 22 PostgreSQL实例与集群
数据库·笔记·postgresql
ss2738 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 21 PostgreSQL进程与内存架构介绍
数据库·笔记·postgresql