Redis 数据类型入门:5 大核心类型与常见业务场景

文章目录

  • 前言
  • [4. Redis 数据类型(核心)](#4. Redis 数据类型(核心))
    • [4.1 String](#4.1 String)
    • [4.2 Hash](#4.2 Hash)
      • [Hash 是什么](#Hash 是什么)
      • 常用命令
      • 应用场景
      • [Hash 和 String 如何选择](#Hash 和 String 如何选择)
    • [4.3 List](#4.3 List)
    • [4.4 Set](#4.4 Set)
    • [4.5 ZSet(重点)](#4.5 ZSet(重点))
    • [4.6 其他数据类型](#4.6 其他数据类型)
      • [1. Bitmap(位图)](#1. Bitmap(位图))
      • [2. HyperLogLog](#2. HyperLogLog)
      • [3. Geo](#3. Geo)
      • [4. Stream](#4. Stream)
  • 结语

前言

Redis 之所以强大,不仅因为它速度快,更因为它提供了丰富的数据类型来解决不同业务问题。

例如:

  • 计数器为什么适合用 String?
  • 排行榜为什么通常使用 ZSet?
  • 用户信息为什么很多项目选择 Hash?

不同的数据结构,决定了 Redis 在业务中的使用方式。

本文将围绕 Redis 的核心数据类型展开,结合常见命令与实际应用场景,帮助你快速建立 Redis 数据结构选型思维。

4. Redis 数据类型(核心)

4.1 String

String 是什么

String 是 Redis 最常用的数据类型,可以理解为: key --> value。

例如:

bash 复制代码
set name tom
get name

除了字符串,它还能存数字、JSON、token、对象数据。

比如:

bash 复制代码
set user '{"name":"tom","age":20}'

常用命令

  • set/get:设置值 和 获取值
bash 复制代码
# 设置值
set name tom
# 获取值
get name
  • setex:设置并指定过期时间
bash 复制代码
# 表示号码 13800 的验证码 8888 过 60 秒过期
setex code: 13800 60 8888
  • incr:自增
bash 复制代码
# 执行一次 阅读量 +1
incr article:1:view
  • decr:自减
bash 复制代码
# 常用于 库存扣减
decr stock:1001
  • append:追加字符串
bash 复制代码
append msg hello
append msg world
  • mget/mset:批量操作
bash 复制代码
mset k1 v1 k2 v2
mget k1 k2

应用场景

  1. 计数器

    Redis 非常适合统计数量。例如:阅读量、点赞数、在线人数、商品库存。通过自增或自减实现。

  2. 分布式锁

    例如:

bash 复制代码
set lock:order 1 nx ex 10

表示:

  • nx:不存在才能设置
  • ex:10 秒后自动过期
    常用于防止重复下单。

4.2 Hash

Hash 是什么

Hash 类似于 Java 中的 Map,结构为:field -->value,适合存对象。

例如:

bash 复制代码
hset user:1 name tom
hset user:1 age 20

结构:

复制代码
user:1
    name -> tom
    age  -> 20

常用命令

  • hset / hget:设置字段 / 获取字段
bash 复制代码
hset user:1 name tom
hget user:1 name
  • hmset / hmget:批量 设置 和 获取
bash 复制代码
hmset user:1 name tom age 20 city beijing
hmget user:1 name age
  • hgetall:获取整个对象
bash 复制代码
hgetall user:1
  • hdel:删除字段
bash 复制代码
hdel user:1 age

应用场景

  1. 用户信息
    例如:用户昵称、用户年龄、用户头像,使用 Hash:
bash 复制代码
hset user:1001 name tom
hset user:1001 age 20
  1. 商品信息
    例如:商品名称、价格、库存
bash 复制代码
hset product:1 price 5999
  1. 购物车
    结构例如:用户 --> 商品 --> 数量
bash 复制代码
# 表示用户购买了 2 件商品
hset cart:1001 product:1 2
  1. 配置信息
    例如:网站配置系统配置
bash 复制代码
hset config:web title redis-study

Hash 和 String 如何选择

Hash 适合

  • 字段较多
  • 经常修改部分字段
  • 对象结构简单

String 适合

  • 整体读取
  • JSON 结构复杂
  • 很少修改字段

4.3 List

List 是什么

Redis List 本质上是有序列表,可以:

  • 左边插入
  • 右边插入
  • 左边弹出
  • 右边弹出
    因此非常适合作队列。

常用命令

  • lpush:左侧插入
bash 复制代码
lpush msg hello
  • rpush:右侧插入
bash 复制代码
rpush msg world
  • lpop:左侧弹出
bash 复制代码
lpop msg
  • rpop:右侧弹出
bash 复制代码
rpop msg
  • lrange:查看列表
bash 复制代码
# 表示查看全部元素
lrange msg 0 -1
  • llen:查看 list 长度
bash 复制代码
llen msg
  • blpop:阻塞读取,如果没有数据会一直等待
bash 复制代码
blpop queue 0

应用场景

  1. 消息队列
    例如:订单队列。

生产者:

bash 复制代码
lpush order_queue order1

消费者:

bash 复制代码
brpop order_queue 0
  1. 评论列表
    例如:文章最新评论。
bash 复制代码
lpush comment:list xxx

4.4 Set

Set 是什么

Set 特点:无序不可重复。

例如:

bash 复制代码
sadd like:1 user1
sadd like:1 user2

不会重复保存

常用命令

  • sadd:添加元素。
bash 复制代码
sadd user:1 tom
  • smembers:获取全部元素。
bash 复制代码
smembers user:1
  • srem:删除元素。
bash 复制代码
srem user:1 tom
  • sismember:判断是否存在。
bash 复制代码
sismember user:1 tom
  • scard:统计数量。
bash 复制代码
scard like:1
  • sinter:求交集。
bash 复制代码
sinter friend:a friend:b

应用场景

  1. 点赞系统
    例如:一个用户只能点赞一次
bash 复制代码
sadd like:1001 user1

依靠 set 的自动去重。

  1. 共同好友
    例如:A 的好友集合B 的好友集合
    求共同好友:
bash 复制代码
sinter friend:a friend:b
  1. 抽奖名单
    保存所有参与用户。
bash 复制代码
sadd activity:1 user1

然后随机抽取。

  1. 标签系统
    例如:用户兴趣标签
bash 复制代码
sadd user:1:tags java redis mysql

4.5 ZSet(重点)

Zset 是什么

ZSet是可排序集合,每个元素都有score(分数)。

例如:

bash 复制代码
zadd rank 100 tom
zadd rank 80 jack

Redis 会根据 score 自动排序。

常用命令

  • zadd:添加元素
bash 复制代码
zadd rank 100 tom
  • arange:升序查看
bash 复制代码
zrange rank 0 -1
  • zrevrange:降序查看,常用于 排行榜 Top10
bash 复制代码
zrevrange rank 0 9
  • zincrby:增加分数
bash 复制代码
zincrby rank 10 tom
  • zscore:查看分数
bash 复制代码
zscore rank tom
  • zrem:删除元素
bash 复制代码
zrem rank tom

应用场景

  1. 排行榜
    比如说查看 游戏积分榜、热门文章、销量排行的前 10 名。
bash 复制代码
zrevrange hot_rank 0 9
  1. 热搜榜

    热度越高,score 越大,自动排序。

  2. 延迟队列

    利用 score 保存时间戳,到时间后消费。

  3. 优先级任务

    score 越高,优先级越高。

4.6 其他数据类型

除了常见的: String、Hash、List、Set、ZSet,Redis 还提供了一些特殊数据类型,用于解决特定业务问题。日常开发中使用相对较少,了解即可。

1. Bitmap(位图)

Bitmap 用 0 和 1 表示状态,适合场景有签到、在线状态、是否完成任务。

常用命令有:

bash 复制代码
SETBIT key offset value
GETBIT key offset
BITCOUNT key

示例:

bash 复制代码
setbit dailycheck:1001 100 1

表示用户 1001 在第 100 天签到成功,其中1 表示已签到、0 表示未签到。

2. HyperLogLog

用于统计去重后的元素数量。

比方说,网站 UV(独立访客),即使一个用户访问很多次,也只统计一次。

常用命令:

bash 复制代码
pfadd uv user1
pfcount uv

3. Geo

Geo 用于存储经纬度信息,可以计算:距离、附近的人、附近商家。

常用命令:

bash 复制代码
geoadd
geodist
georadius

示例:

bash 复制代码
geoadd city 116.40 39.90 beijing

适用于:

text 复制代码
外卖、打车、地图定位

4. Stream

Redis 5.0 新增的数据结构。

本质上是消息队列。相比 List,Stream支持:消息持久化、消费组、 阻塞读取。

适用于:

text 复制代码
异步任务
订单处理
消息通知

可以理解为:List 是简单队列,Stream 是增强版队列。不过在大型项目中,一般还是会使用专业 MQ,诸如Kafka、RocketMQ、RabbitMQ。

结语

Redis 的核心并不只是"记住命令",而是:根据业务场景选择合适的数据结构。

例如:

  • String:计数、缓存
  • Hash:对象存储
  • List:队列
  • Set:去重
  • ZSet:排行榜
    当你能够看到需求,就想到对应的数据类型时,才算真正掌握了 Redis。
相关推荐
学地理的小胖砸1 小时前
【批量处理tiff文件生成jpg缩略图】
数据库·人工智能·python
承渊政道1 小时前
【MySQL数据库学习】(MySQL数据类型)
数据库·学习·mysql·ubuntu·bash·数据库开发·数据库系统
梦想的颜色1 小时前
MySQL 三大日志:Redo Log、Undo Log 和 Binlog 完全解析
数据库·mysql·数据库架构
KaMeidebaby1 小时前
卡梅德生物技术快报|蛋白修饰调控 NETosis 分子机制及实验研究进展
前端·数据库·人工智能·算法·百度
睡不醒男孩0308231 小时前
行业解决方案一:CLup助力金融行业构建自主可控PostgreSQL高可用数据库平台
数据库·金融·clup
自传.2 小时前
Redis 高频考试面试知识点2(主从复制、缓存穿透/击穿/雪崩、集群分片、切片)
redis·缓存·面试
韦胖漫谈IT2 小时前
数据库关系型 vs 非关系型:选型从问题出发
数据库
土狗TuGou2 小时前
SQL内功笔记 · 第9篇:UPDATE FROM 进阶——告别逐行子查询,拥抱集合更新
java·数据库·笔记·sql·mysql
代码中介商2 小时前
Redis位图实战:海量数据高效处理
数据库·redis·缓存