游乐游手机版
首页/数据库/文章详情

Redis常用命令总结

时间:2026-04-23 12:05
在当今的开发实践中,Redis凭借其卓越的性能,早已成为缓存、消息队列和排行榜等场景下的核心组件。面对如此丰富的命令集,如何快速定位并高效使用,是每个开发者都会遇到的课题。本文将系统梳理那些在日常开发中间出场率最高的Redis命令,旨在为你构建一份清晰、实用的速查手册。 一 基础操作 1 1 连接

在当今的开发实践中,Redis凭借其卓越的性能,早已成为缓存、消息队列和排行榜等场景下的核心组件。面对如此丰富的命令集,如何快速定位并高效使用,是每个开发者都会遇到的课题。本文将系统梳理那些在日常开发中间出场率最高的Redis命令,旨在为你构建一份清晰、实用的速查手册。

Redis常用命令总结

一. 基础操作

1.1 连接与通用命令

# 连接 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 操作

# 设置键值对(带过期时间)
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(字符串)

# 设置和获取
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(哈希)

# 设置字段
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(列表)

# 添加元素(左侧)
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(集合)

# 添加元素
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(有序集合)

# 添加元素
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 缓存场景

# 设置缓存
SET cache:user:1001 '{"id":1001,"name":"张三"}' EX 3600
# 获取缓存
GET cache:user:1001
# 删除缓存
DEL cache:user:1001

7.2 计数器

# 文章阅读量
INCR article:1001:views
# 点赞数
INCR post:1001:likes
# 批量点赞计数
INCRBY post:1001:likes 10

7.3 分布式锁

# 获取锁
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 排行榜

# 添加分数
ZADD leaderboard 95 "player1" 87 "player2" 92 "player3"
# 获取前10名
ZREVRANGE leaderboard 0 9 WITHSCORES
# 获取玩家排名
ZREVRANK leaderboard "player1"
# 增加分数
ZINCRBY leaderboard 5 "player1"

7.5 消息队列

# 生产者(左侧入队)
LPUSH queue:task '{"id":1,"type":"email"}'
# 消费者(右侧出队,阻塞5秒)
BRPOP queue:task 5

7.6 用户标签

# 添加标签
SADD user:1001:tags "程序员" "技术控" "音乐迷"
# 获取标签
SMEMBERS user:1001:tags
# 判断标签是否存在
SISMEMBER user:1001:tags "程序员"
# 查找共同标签的用户(交集)
SINTER user:1001:tags user:1002:tags
来源:https://www.jb51.net/database/362569hnq.htm
上一篇Mac上实现修改MySQLWorkbench主题配色 下一篇Docker部署远程MySQL从端口踩坑到权限全开完整步骤(附避坑指南)
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Redis 7.0增量AOF重写RDB前导码配置详解
数据库 · 2026-07-02

Redis 7.0增量AOF重写RDB前导码配置详解

先说一个几乎所有人都踩过的典型误区:很多人把 aof-use-rdb-preamble yes 当作开启“增量重写”的开关。实际上,这个配置只干了一件事——让重写后的 AOF 文件头部带上 RDB 快照。它解决的是加载速度问题,跟“增量重写”本身的概念压根不是一回事。真正的增量重写,依赖的是 Red

在Python Tornado异步框架中安全执行SQL命令的方法与最佳实践
数据库 · 2026-07-02

在Python Tornado异步框架中安全执行SQL命令的方法与最佳实践

直接在Tornado里用SQLAlchemy同步执行SQL,结果就是阻塞IOLoop,所谓“异步框架里写同步数据库代码”,等于白搭。安全执行的关键不是“怎么写SQL”,而是“怎么不卡住事件循环”。 为什么不能在RequestHandler里直接调用session execute() 因为sessio

利用SQL触发器实现在INSERT数据时自动同步到审计表
数据库 · 2026-07-02

利用SQL触发器实现在INSERT数据时自动同步到审计表

先说结论:可以用触发器把 INSERT 数据同步到审计表,但必须用 AFTER INSERT,并且审计表的字段顺序、类型、字符集得和源表严格一致。否则,轻则写入错位、数据截断,重则直接报错、丢数据。下面把这些坑一个一个掰开说。 能,但必须用 AFTER INSERT,且审计表字段顺序、类型、字符集要

如何用SQL编写按不同工作日统计员工出勤率
数据库 · 2026-07-02

如何用SQL编写按不同工作日统计员工出勤率

在实际业务中,统计不同工作日的出勤率是HR系统里的高频需求。如果直接按日期函数分组,很容易掉进语言环境、索引失效或分母口径的坑里。下面就来拆解具体的实现要点。 必须用 CASE WHEN 将日期映射为固定 weekday 标签(如 Mon )再分组,避免语言环境导致的分组断裂;需过滤 DOW IN

Spring Boot 3动态拼接SQL为何引发严重安全漏洞
数据库 · 2026-07-02

Spring Boot 3动态拼接SQL为何引发严重安全漏洞

SQL注入漏洞的核心成因,本质上是因为用户输入直接参与了SQL语句的字符串拼接,而未采用参数化绑定机制。在MyBatis中使用${}、QueryWrapper中调用apply()与last()、JPA的@Query注解进行拼接等操作,都会绕过PreparedStatement的安全防护。动态字段必须