Redis

Redis 五种常见数据类型(工程师速查版)

核心概念:Redis 是内存键值数据库,Key 永远是 String,Value 可以是五种数据结构之一。


0. 五大数据类型速览

类型 类比 特点 典型场景
String 变量 存一个值 缓存、计数、Token、验证码
Hash 对象 / 一行数据 字段-值对 用户信息、配置、商品详情
List 队列 有序、可重复 消息队列、最新动态
Set 集合 无序、不重复 标签、好友关系、去重
ZSet 带权重的集合 有序、不重复 排行榜、优先级队列

1. String(字符串)—— 存「一个值」

值可以是:数字 / 字符串 / JSON / 二进制

基本读写

SET key value          # 设置 key 的值为 value(key 已存在则覆盖)
GET key                # 获取 key 的值
DEL key                # 删除 key
EXISTS key             # 判断 key 是否存在(1=存在,0=不存在)

过期时间(非常重要)

SET key value EX 60    # 设置 key=value,60 秒后自动删除
TTL key                # 查看 key 剩余过期秒数
                       #   -1 = 没有设置过期时间
                       #   -2 = key 不存在
EXPIRE key 60          # 为已有 key 设置 60 秒过期
PERSIST key            # 移除 key 的过期时间(变永久)

常用场景:验证码、登录 Token、临时状态

计数操作(Redis 强项,原子操作)

INCR key               # key 对应数字 +1
DECR key               # key 对应数字 -1
INCRBY key 10          # key 对应数字 +10

常用场景:访问量统计、未读消息数、库存扣减

条件设置

SET key value NX       # 仅当 key 不存在时才设置(常用于分布式锁)
SET key value XX       # 仅当 key 已存在时才设置(更新)

2. Hash(哈希)—— 存「一个对象」

类比:C# 的 Dictionary<string, string>,MySQL 的一行数据

设置字段

HSET user:1 name "Tom"   # 在 user:1 对象中设置 name = Tom
HSET user:1 age 18       # 同一个对象可不断加字段

读取字段

HGET user:1 name         # 获取 user:1 的 name 字段
HGETALL user:1           # 获取 user:1 所有字段和值

删除 & 判断

HDEL user:1 age          # 删除 age 字段(不是删整个 key)
HEXISTS user:1 name      # 判断对象里是否有 name 字段(1=存在)
HLEN user:1              # 获取 user:1 的字段数量

推荐场景:用户信息、医生资料、群组配置、商品详情


3. List(列表)—— 有序的队列

有序、可重复,从两端进出

插入(推入)

LPUSH messages "msg1"    # 从左边(头部)插入
RPUSH messages "msg2"    # 从右边(尾部)插入

弹出(取出并删除)

LPOP messages            # 从左边弹出
RPOP messages            # 从右边弹出

LPUSH + RPOP 组合 = 队列(FIFO)
LPUSH + LPOP 组合 = 栈(LIFO)

查看 & 长度

LRANGE messages 0 -1     # 查看整个列表(0=第一个,-1=最后一个)
LLEN messages            # 列表长度

常用场景:消息队列、最新 N 条动态、操作日志


4. Set(集合)—— 「在不在里面」

无序、不重复,只关心成员是否存在

增删查

SADD online_users user1      # 添加成员
SREM online_users user1      # 删除成员
SMEMBERS online_users        # 查看所有成员
SCARD online_users           # 成员数量
SISMEMBER online_users user1 # 判断 user1 是否在集合中(1=是,0=否)

集合运算

SUNION set1 set2             # 并集(两个集合中所有成员)
SINTER set1 set2             # 交集(两个集合共有的)
SDIFF set1 set2              # 差集(在 set1 但不在 set2)

常用场景:在线用户、标签系统、共同好友、去重


5. ZSet(有序集合)—— 排行榜专用

每个成员带一个分数(score),按分数排序,成员不可重复

增删查

ZADD rank 100 tom            # 添加成员 tom,分数 100
ZADD rank 200 jack           # 添加成员 jack,分数 200
ZREM rank tom                # 删除成员

查询排名

ZRANGE rank 0 -1 WITHSCORES     # 按分数从小到大列出所有成员及分数
ZREVRANGE rank 0 -1 WITHSCORES  # 按分数从大到小(即排行榜)
ZSCORE rank tom                 # 查看 tom 的分数
ZRANK rank tom                  # 查看 tom 的排名(从小到大,0 起始)
ZREVRANK rank tom               # 查看 tom 的排名(从大到小)

常用场景:排行榜、积分排名、优先级队列、延迟队列


6. Key 通用命令

这些命令适用于所有数据类型的 Key。

KEYS pattern               # 查找匹配的 key(如 KEYS user:*)
                           # ⚠️ 线上慎用,数据量大时会阻塞
SCAN 0 MATCH user:* COUNT 100  # 增量扫描 key(推荐,非阻塞)
TYPE key                   # 查看 key 的类型(string/hash/list/set/zset)
DEL key                    # 删除 key(适用于所有类型)
EXISTS key                 # 判断 key 是否存在
EXPIRE key 60              # 设置过期时间(秒)
TTL key                    # 查看剩余过期时间

7. 高级特性

发布/订阅

SUBSCRIBE chat             # 订阅频道 chat
PUBLISH chat "hello"       # 向频道 chat 发送消息

事务

MULTI                      # 开始事务
INCR count
EXPIRE count 60
EXEC                       # 提交事务(一次性执行队列中的所有命令)

分布式锁

# 加锁:仅当 lock:key 不存在时设置,10 秒自动释放
SET lock:key value NX EX 10

# 释放锁
DEL lock:key

注意:生产环境建议使用 Redlock 算法或 Redisson 客户端,简单 SET NX 在故障恢复场景下有安全性问题。


8. 类型对比速查

操作 String Hash List Set ZSet
添加 SET HSET LPUSH/RPUSH SADD ZADD
读取 GET HGET / HGETALL LRANGE SMEMBERS ZRANGE
删除 DEL HDEL LPOP/RPOP SREM ZREM
判断存在 EXISTS HEXISTS SISMEMBER ZSCORE
计数/长度 INCR HLEN LLEN SCARD ZCARD
排序 按插入顺序 按分数

学习建议:先从 String 和 Hash 开始,每天敲两遍命令加深记忆。理解「什么时候用哪种类型」比背命令更重要。

image

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇