目 录CONTENT

文章目录

redis命令入门

~梓
2026-01-06 / 0 评论 / 0 点赞 / 6 阅读 / 0 字
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Redis 命令入门

个人技术笔记 - Redis 基础系列第一篇

什么是 Redis

Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它支持多种数据结构,性能极高,常用于高并发场景。

核心特点:

  • 基于内存,读写速度极快
  • 支持数据持久化
  • 支持多种数据结构
  • 支持主从复制、哨兵、集群
  • 单线程模型(6.0 后引入多线程 I/O)

基础操作

连接 Redis

# 启动 Redis 服务
redis-server

# 连接到 Redis
redis-cli

# 连接到指定主机和端口
redis-cli -h 127.0.0.1 -p 6379

# 带密码连接
redis-cli -a your_password

基本命令

# 测试连接
PING  # 返回 PONG

# 查看所有键
KEYS *

# 查看 Redis 信息
INFO

# 选择数据库(默认 16 个,0-15)
SELECT 1

# 清空当前数据库
FLUSHDB

# 清空所有数据库
FLUSHALL

五大基础数据类型

1. String(字符串)

最基本的数据类型,一个 key 对应一个 value。

# 设置值
SET name "张三"
SET age 25

# 获取值
GET name  # "张三"

# 设置并返回旧值
GETSET name "李四"  # 返回 "张三"

# 批量设置
MSET key1 "value1" key2 "value2" key3 "value3"

# 批量获取
MGET key1 key2 key3

# 设置过期时间(秒)
SETEX session:token 3600 "abc123"  # 3600 秒后过期

# 仅当 key 不存在时设置
SETNX lock:user:1001 "locked"  # 返回 1 表示成功,0 表示已存在

# 追加字符串
APPEND name "同学"  # name 变为 "李四同学"

# 获取字符串长度
STRLEN name

# 数值操作
SET counter 10
INCR counter      # 自增 1,返回 11
INCRBY counter 5  # 增加 5,返回 16
DECR counter      # 自减 1,返回 15
DECRBY counter 3  # 减少 3,返回 12

应用场景: 缓存、计数器、分布式锁、Session 存储


2. Hash(哈希)

类似于 JavaScript 的对象或 Python 的字典,适合存储对象。

# 设置单个字段
HSET user:1001 name "张三"
HSET user:1001 age 25
HSET user:1001 email "zhangsan@example.com"

# 获取单个字段
HGET user:1001 name  # "张三"

# 批量设置
HMSET user:1002 name "李四" age 30 city "北京"

# 批量获取
HMGET user:1002 name age city

# 获取所有字段和值
HGETALL user:1001

# 获取所有字段名
HKEYS user:1001

# 获取所有值
HVALS user:1001

# 判断字段是否存在
HEXISTS user:1001 email  # 返回 1 表示存在

# 删除字段
HDEL user:1001 email

# 获取字段数量
HLEN user:1001

# 数值字段自增
HINCRBY user:1001 age 1  # age 增加 1

应用场景: 存储对象(用户信息、商品信息)、购物车


3. List(列表)

有序的字符串列表,底层是链表实现,适合队列、栈等场景。

# 从左侧插入(头部)
LPUSH tasks "task1"
LPUSH tasks "task2" "task3"  # 列表:["task3", "task2", "task1"]

# 从右侧插入(尾部)
RPUSH logs "log1" "log2" "log3"  # 列表:["log1", "log2", "log3"]

# 获取列表长度
LLEN tasks

# 获取指定范围元素(0 表示第一个,-1 表示最后一个)
LRANGE tasks 0 -1  # 获取所有元素
LRANGE tasks 0 1   # 获取前两个元素

# 获取指定索引元素
LINDEX tasks 0  # 获取第一个元素

# 从左侧弹出(头部)
LPOP tasks  # 返回并移除 "task3"

# 从右侧弹出(尾部)
RPOP logs  # 返回并移除 "log3"

# 阻塞式弹出(用于消息队列)
BLPOP tasks 10  # 等待 10 秒,如果有元素则弹出

# 修改指定索引的值
LSET tasks 0 "new_task"

# 删除指定值的元素
LREM tasks 1 "task1"  # 删除 1 个值为 "task1" 的元素

# 保留指定范围的元素
LTRIM tasks 0 99  # 只保留前 100 个元素

应用场景: 消息队列、最新动态列表、评论列表


4. Set(集合)

无序的字符串集合,元素唯一,支持集合运算。

# 添加元素
SADD tags "Python" "Redis" "Docker"
SADD tags "Python"  # 重复添加无效

# 获取所有元素
SMEMBERS tags

# 判断元素是否存在
SISMEMBER tags "Python"  # 返回 1 表示存在

# 获取集合元素数量
SCARD tags

# 删除元素
SREM tags "Docker"

# 随机获取元素(不删除)
SRANDMEMBER tags 2  # 随机获取 2 个元素

# 随机弹出元素(删除)
SPOP tags

# 集合运算
SADD set1 "a" "b" "c"
SADD set2 "b" "c" "d"

SINTER set1 set2      # 交集:["b", "c"]
SUNION set1 set2      # 并集:["a", "b", "c", "d"]
SDIFF set1 set2       # 差集:["a"]

# 将交集结果存储到新集合
SINTERSTORE result set1 set2

应用场景: 标签系统、共同好友、抽奖系统、去重


5. Sorted Set(有序集合)

有序的集合,每个元素关联一个分数(score),按分数排序。

# 添加元素(score member)
ZADD leaderboard 100 "player1"
ZADD leaderboard 200 "player2" 150 "player3"

# 获取元素数量
ZCARD leaderboard

# 获取指定范围元素(按分数从小到大)
ZRANGE leaderboard 0 -1  # 获取所有元素
ZRANGE leaderboard 0 -1 WITHSCORES  # 同时显示分数

# 获取指定范围元素(按分数从大到小)
ZREVRANGE leaderboard 0 2  # 获取前 3 名

# 获取元素的分数
ZSCORE leaderboard "player1"

# 获取元素的排名(从 0 开始)
ZRANK leaderboard "player1"      # 正序排名
ZREVRANK leaderboard "player1"   # 倒序排名

# 增加元素的分数
ZINCRBY leaderboard 50 "player1"  # player1 分数增加 50

# 删除元素
ZREM leaderboard "player3"

# 按分数范围获取元素
ZRANGEBYSCORE leaderboard 100 200  # 获取分数在 100-200 之间的元素

# 按分数范围删除元素
ZREMRANGEBYSCORE leaderboard 0 100

# 按排名范围删除元素
ZREMRANGEBYRANK leaderboard 0 2  # 删除排名 0-2 的元素

# 获取指定分数范围的元素数量
ZCOUNT leaderboard 100 200

应用场景: 排行榜、优先级队列、延时队列


通用键操作

# 查看键是否存在
EXISTS name  # 返回 1 表示存在

# 删除键
DEL name age

# 设置过期时间(秒)
EXPIRE session:token 3600

# 设置过期时间(毫秒)
PEXPIRE session:token 3600000

# 设置过期时间点(Unix 时间戳)
EXPIREAT session:token 1735689600

# 查看剩余过期时间(秒)
TTL session:token  # 返回 -1 表示永不过期,-2 表示已过期

# 查看剩余过期时间(毫秒)
PTTL session:token

# 移除过期时间
PERSIST session:token

# 重命名键
RENAME oldkey newkey

# 查看键的数据类型
TYPE name  # 返回 string、hash、list、set、zset

# 查看键的内存占用(字节)
MEMORY USAGE name

事务

Redis 事务可以一次执行多个命令,但不支持回滚。

# 开启事务
MULTI

# 执行命令(命令会进入队列)
SET account:1 100
SET account:2 200
DECRBY account:1 50
INCRBY account:2 50

# 执行事务
EXEC

# 取消事务
DISCARD

# 监视键(乐观锁)
WATCH account:1
MULTI
DECRBY account:1 50
EXEC  # 如果 account:1 在 WATCH 后被修改,事务会失败

持久化

RDB(快照)

定期将内存数据保存到磁盘。

# 手动触发快照
SAVE      # 阻塞式保存
BGSAVE    # 后台保存

# 查看最后一次保存时间
LASTSAVE

AOF(追加文件)

记录每个写操作,重启时重新执行。

# 手动触发 AOF 重写
BGREWRITEAOF

实用技巧

1. 模糊查询键

# 查找所有以 user: 开头的键
KEYS user:*

# 查找所有包含 session 的键
KEYS *session*

# 更安全的方式(不阻塞)
SCAN 0 MATCH user:* COUNT 100

2. 批量删除键

# Linux/Mac
redis-cli KEYS "temp:*" | xargs redis-cli DEL

# Windows PowerShell
redis-cli KEYS "temp:*" | ForEach-Object { redis-cli DEL  }

3. 查看慢查询

# 获取慢查询日志
SLOWLOG GET 10

# 查看慢查询日志长度
SLOWLOG LEN

# 清空慢查询日志
SLOWLOG RESET

常见应用场景总结

场景 数据类型 示例
缓存 String 用户信息、文章内容
计数器 String 点赞数、浏览量
分布式锁 String SETNX + EXPIRE
Session String/Hash 用户会话
购物车 Hash 商品 ID 为字段,数量为值
消息队列 List LPUSH + BRPOP
最新动态 List LPUSH + LRANGE
标签系统 Set 文章标签、用户兴趣
共同好友 Set SINTER
排行榜 Sorted Set 游戏积分、热门文章
延时队列 Sorted Set 时间戳作为 score

下一步学习

  • Redis 高级特性(发布订阅、Lua 脚本)
  • Redis 持久化深入(RDB vs AOF)
  • Redis 主从复制与哨兵
  • Redis 集群
  • Redis 性能优化

参考资料:


最后更新:2026-01-06

0

评论区