ToolkitX
知识库工具箱

数据类型详解

String, Hash, List, Set, ZSet

25min·入门

01. String——不止是字符串

String 是 Redis 最基础的类型,但别看名字叫「字符串」,它其实万能。能存文本、JSON、数字,甚至二进制。 最大亮点是原子自增——多个客户端同时 INCR 同一个 key,绝不会出现竞态条件。计数器、分布式 ID 生成全靠它。
bash
# String 花式用法
SET page:home "首页内容"
GET page:home

# 原子数字操作
SET views 0
INCR views              # → 1
INCRBY views 100        # → 101
DECR views              # → 100

# 带过期
SETEX token 3600 "abc123"  # 3600 秒后自动删

# 条件设置(不存在才设,分布式锁基础)
SETNX lock:resource "1"
SETNX + EXPIRE 是 Redis 分布式锁的经典套路,生产环境建议用 Redlock 算法或 Redisson 等成熟库。

02. Hash——存对象利器

Hash 是「键值对里的键值对」,特别适合存对象。跟用 String 存 JSON 相比,Hash 可以单独读写某个字段,不用每次序列化反序列化整个对象。
bash
HSET user:100 name "小明" age 25 city "北京"
HGET user:100 name          # → "小明"
HMGET user:100 name age     # 一次拿多个
HGETALL user:100            # 全拿出来

HSET user:100 age 26        # 只改一个
HDEL user:100 city           # 删一个
HINCRBY user:100 age 1      # age 自增 → 27
HEXISTS user:100 email      # → 0

03. List——天然消息队列

List 是有序列表,两头都能操作,天然队列结构。LPUSH + RPOP = 先进先出队列,LPUSH + LPOP = 后进先出栈。
bash
LPUSH news "消息1" "消息2"
RPUSH news "消息3"
LRANGE news 0 -1             # 全看
LPOP news                    # 左弹
RPOP news                    # 右弹
LLEN news                    # 长度

# 裁剪只留前 N 条
LTRIM news 0 99

# 阻塞弹出——消息队列神器
BLPOP queue 5                # 等 5 秒,有数据弹出
BLPOP/BRPOP 是 Redis 做消息队列的核心,配合多消费者实现简单任务分发。

04. Set——去重和集合运算

Set 无序不重复,最大用处是去重以及交集、并集、差集运算。适合标签系统、共同关注。
bash
SADD user:1:tags "python" "redis" "mysql"
SADD user:2:tags "python" "mongodb" "docker"

SINTER user:1:tags user:2:tags   # 交集 → 共同标签 "python"
SUNION user:1:tags user:2:tags   # 并集
SDIFF user:1:tags user:2:tags    # 差集

SRANDMEMBER user:1:tags          # 随机抽一个
SPOP user:1:tags                 # 弹出一个

05. Sorted Set——排行榜第一名

Sorted Set 是 Set 的升级版——每个元素带「分数」按分自动排序。排行榜功能的最佳人选。 按分数范围查、按排名查,非常灵活。
bash
ZADD score 100 "张三" 85 "李四" 92 "王五"

ZRANGE score 0 -1 WITHSCORES    # 升序
ZREVRANGE score 0 -1 WITHSCORES # 降序(排行榜)

ZREVRANK score "张三"   # → 0(第一名)
ZSCORE score "张三"     # → "100"

ZRANGEBYSCORE score 90 100 WITHSCORES

知识测验

1/5正确 0

Redis 中哪种数据类型最适合排行榜?

下一节

常用命令大全

下一节