大数据 -40 Redis 类型集合 string list set zsorted hash 详解

点一下关注吧!!!非常感谢!!持续更新!!!
🚀 AI 篇持续更新中!(长期更新)
AI 炼丹日志-30-新发布【1T 万亿】参数量大模型!Kimi‑K2 开源大模型解读与实践,持续打造实用 AI 工具指南!📐🤖
💻 Java 篇正式开启!(300 篇)
目前 2025 年 07 月 10 日更新到:Java-68 深入浅出 分布式服务 Netty 实现自定义 RPC 附详细代码 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!
📊 大数据板块已完成多项干货更新(300 篇):
包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解

章节内容
上一节我们完成了:
Redis 源码下载
Redis 编译、安装
Redis 配置修改
Redis 服务启动
背景介绍
这里是三台公网云服务器,每台 2C4G,搭建一个大数据的学习环境,供我学习。
2C4G 编号 h121
2C4G 编号 h122
2C2G 编号 h123

通用键空间命令(Key Commands)
EXISTS key:判断键是否存在,O(1),不存在即“冷缓存”或已过期
DEL key1 [key2…]:删除键,O(m)(m=键数),删除大集合会锁住线程,慎用
EXPIRE key 60 / TTL key:,设置 / 查询剩余 TTL,O(1),“写缓存时带 TTL” 基操
TYPE key:返回值类型,O(1),动态调试、监控
KEYS pattern:扫描匹配键,O(N),线上禁用;用 SCAN
SCAN cursor [MATCH p*] [COUNT 1000]:游标遍历键,O(N),运维巡检、热点排查
RENAME a b / RENAMENX a b:重命名键,O(1):原子替换热键
string 类型
常见操作

`SET key “v” [EX 60:PX 60000] [NX,GET key / MGET k1 k2
获取单个 / 多个:INCR key / INCRBY key 5 / INCRBYFLOAT key 0.1,原子计数器、限流
SETBIT key offset 1 / GETBIT / BITCOUNT:Bitmap 布隆位图,APPEND key "tail" / STRLEN key
日志拼接、长度统计:GETSET key new,原子读取旧值并替换;实现“分布式锁超时”常用
高频使用的场景:
网站 PV/UV 计数、接口 QPS 令牌桶
分布式唯一 ID(Lua + INCR)
简单缓存(带 EX)
应用场景
key 和 value 是字符串
普通的赋值
incr 用于乐观锁(incr 递增数字)
setnx 用于分布式锁(当 value 不存在时赋值)
比如使用 setnx:
执行结果如下图:

list 类型
list 列表可以存储有序、可重复的元素,获取头部或者尾部附近的记录是最快的。双向链表。头尾极快,随机索引/删除成本随长度线性。主流做 消息队列、时间线。
常见操作
表 1

表 2

LPUSH queue v1 v2 / RPUSH:左 / 右入队
LPOP queue / RPOP:出队
BLPOP queue 5:阻塞弹出;可做“消费者端拉”
LRANGE queue 0 9:分页拉取
LTRIM queue 0 99:维持有限长度(环形日志)
LMOVE q1 q2 LEFT RIGHT:原子转移元素
PS:长列表 LRANGE 0 -1 会堵塞线程;改用 分页 或 Stream。
应用场景
可以作为栈或者队列使用,列表有序。可以用做各种表:比如用户表、商品表等:
set 类型
Set:无序、唯一无序、去重,底层整数集合/哈希表自动切换。
常见操作

SADD tag:redis u1 u2:添加成员
SMEMBERS tag:redis:全量取出
SISMEMBER tag:redis u1:判断成员
SRANDMEMBER key [count] / SPOP:随机抽样 / 弹出
SUNION / SINTER / SDIFF:并集、交集、差集(批量写到 …STORE)
SSCAN:分批遍历
场景有:好友列表、去重集合、抽奖摇号。
应用场景
适用于不能够重复且不需要顺序的场景比如:关注的用户列表,进行随机抽奖
sortedset (zset)类型
SortedSet(ZSet)有序集合:元素本身是无序不重复的,每个元素关联一个分数,可按分数排序,分数可重复。value+score。既能排名,又能按分数检索。
常见操作
表 1

表 2

ZRANGE rank 0 9 WITHSCORES / ZREVRANGE:正 / 逆序排行
ZRANGEBYSCORE rank 80 100:分数区间检索
ZINCRBY rank 5 user1:增量更新分数
ZREM rank user1 / ZREMRANGEBYRANK rank 0 9:删成员 / 删区间
ZCOUNT rank 80 100:区间计数
ZSCAN:游标遍历大排行榜
场景有:积分榜、实时热搜、延时队列(score=时间戳)。
应用场景
可以按照分数值排序,适用于各种排行榜。比如:点击排行榜、销量排行榜、关注排行榜等等
hash 类型
Redis Hash 是一个 string 类型的 field 和 value 的映射表,它提供字段和字段值的映射。适合存储 同一主键下多字段,如用户资料。单字段 ≤ 4 KB 且字段数不宜过大(万级别以上会退化)。

常见操作

HSET u:1001 name "康康" age 27:批量写;>= 4.x HMSET 已弃用
HGET u:1001 name / HGETALL u:1001:取字段 / 取整条
HINCRBY u:1001 points 10:增量积分
HEXISTS HLEN HDEL:字段存在、字段数、删字段
HRANDFIELD key [count WITHVALUES]:随机字段抽样;做广告轮播
应用场景
对象的存储,表数据的映射
版权声明: 本文为 InfoQ 作者【武子康】的原创文章。
原文链接:【http://xie.infoq.cn/article/68a685b57dbce8168ba6a6805】。文章转载请联系作者。
评论