Redis 核心数据类型及典型使用场景详解

在日常开发中,Redis 不仅是缓存利器,更是一套高性能的数据结构服务。你是否真的了解 Redis 提供的五种核心数据类型?它们各自的底层结构和适用场景又有哪些差异?本篇博客将深入解析 Redis 的数据类型及其典型应用,助你在项目中得心应手地选择最佳方案。

一、Redis 提供了哪些核心数据类型?

Redis 提供五种基础数据类型 + 三种高级数据结构:

数据类型英文名称底层结构典型命令
字符串String简单动态字符串(SDS)SET, GET, INCR, APPEND
列表List双向链表 / 快表LPUSH, RPUSH, LPOP, LRANGE
哈希Hash哈希表 / ziplistHSET, HGET, HGETALL
集合Set散列表 / intsetSADD, SISMEMBER, SMEMBERS
有序集合ZSet跳表(skiplist)+ 哈希表ZADD, ZRANGE, ZREM

Redis 还支持高级结构如 Bitmap、HyperLogLog 和 Geospatial,这里主要讲核心五类。


二、各数据类型详细解析及使用场景

2.1 String(字符串):最常用的类型

特点:

  • 本质上是 字节数组,支持整数/浮点运算、拼接、过期等操作。

  • 单个键值最大 512MB。

使用场景:

  • 缓存对象(如用户信息 JSON)

  • 分布式锁(SETNX + EX)

  • 计数器/点赞数(INCR

SET user:1:name "Tom"
INCR page_view

2.2 Hash(哈希表):适合存储对象

特点:

  • 是一个 key 对应多个 field-value。

  • 类似于 Java 的 Map<String, String>

使用场景:

  • 缓存用户信息、商品详情等结构化数据。

  • 适合属性较多、频繁局部更新的场景。

HMSET user:1 name "Tom" age 18
HGET user:1 name

优势在于可以只修改字段而不更新整条记录。

2.3 List(列表):有序集合,支持阻塞队列 

特点:

  • 可从两端插入或弹出,支持范围访问。

  • 内部为双向链表(小数据优化为 quicklist)。

使用场景:

  • 消息队列(RPUSH + LPOP

  • 评论列表、时间线(按时间有序)

  • 异步任务队列(配合 BLPOP 阻塞读取)

RPUSH msg:list "msg1" "msg2"
LPOP msg:list

2.4 Set(集合):去重 + 无序

特点:

  • 每个元素唯一,支持交并差集。

  • 内部是哈希表(小数据时为 intset)。

使用场景:

  • 标签系统(一个用户多个标签)

  • 活跃用户去重统计

  • 抽奖系统(唯一抽奖码)

SADD tag:user1 "java" "redis"
SISMEMBER tag:user1 "java"

2.5 ZSet(有序集合):带权重的集合

特点:
  • 每个元素带一个 score,自动排序。

  • 内部结构是跳表,支持按分数范围查找。

 使用场景:
  • 排行榜系统(如积分榜)

  • 延时队列(score 设为时间戳)

  • 按热度/权重排序的数据列表

ZADD rank 100 Tom 80 Jerry
ZRANGE rank 0 -1 WITHSCORES

三、开发中的类型选择建议

需求推荐类型
缓存单个值,如 tokenString
缓存结构化对象Hash
实现队列、任务调度List
做集合运算、去重统计Set
实现排行榜、按权重排序的队列ZSet
实现布尔标记、签到系统Bitmap
海量唯一计数(如 UV)HyperLogLog
地理位置计算、附近人功能Geospatial


四、容易忽视的实践建议

  1. 不要把大 JSON 存成 String,应拆成 Hash 结构,方便局部更新。

  2. 避免 List 过长,大列表可能导致读取慢或阻塞,建议分页存储或使用 ZSet。

  3. ZSet 中元素数量大时要定期清理,防止内存膨胀。

  4. 合理设置 TTL,防止缓存雪崩。

  5. 监控 key 数量与内存使用,避免大 key、热 key。


结语

Redis 的五大基础数据类型为各种业务场景提供了强大的支持。理解它们的底层结构和适用场景,能够帮助我们更高效、合理地使用 Redis,写出更加健壮与可维护的系统。

在未来的文章中,我会继续深入分享 Redis 的高级特性(如分布式锁、延时队列、布隆过滤器等),欢迎点赞 + 收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/84991.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/84991.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

threejs webVR获取相机正前方向量

通常获取相机正前方可以使用camera.getWorldDirection(new Vector3()) 函数来得到&#xff0c;但是在threejs0.139.2版本中进入VR后使用上面函数获取的数据是固定不变的&#xff0c;不管是否旋转了头盔&#xff0c;经过一番研究发现必须使用renderer.xr.getCamera() 此函数获取…

华为OD-2024年E卷-字符统计及重排[100分] -- python

问题描述&#xff1a; 给出一个仅包含字母的字符串&#xff0c;不包含空格&#xff0c;统计字符串中各个字母(区分大小写)出现的次数&#xff0c;并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同&#xff0c;按照自然顺序进行排序&#xff0c;且小写…

MCP(模型上下文协议)协议和Http协议对比

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;和 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是两种定位完全不同的协议&#xff0c;主要区别如下&#xff1a; 1. 核心定位 HTTP 通用网络通信协议&am…

C++打印乘法口诀表

int main()​​&#xff1a; 这是C 程序的入口点。每个C 程序都必须有一个 main 函数&#xff0c;程序从这里开始执行。 ​​外层 for 循环​​&#xff1a; for (int i 1; i < 10; i) { int i 1&#xff1a;定义并初始化循环变量 i 为 1。这里的 i 代表乘法表中的行…

RoGBAG 与 MCAP

RoGBAG 和 MCAP 都是机器人领域常用的二进制数据格式&#xff0c;用于存储传感器数据、控制命令和状态信息。两者主要区别在于&#xff1a; RoGBAG&#xff1a;ROS 1/2 的标准日志格式&#xff0c;采用 LZF/LZ4 压缩&#xff0c;适合中小型数据集 MCAP&#xff1a;新一代机器人…

Ubuntu 空间占用情况排查常用命令

查看当前目录总大小及子目录占用详情 du -sh * | sort -hr ​​du​​&#xff1a;磁盘使用统计命令​​-s​​&#xff1a;显示每个参数的总计&#xff08;不递归子目录&#xff09;​​-h​​&#xff1a;以人类可读格式&#xff08;KB/MB/GB&#xff09;显示​​*​​&…

C语言编译优化实战与技巧

一.概述 1.C语言编译优化介绍 C语言编译优化是提升程序性能的核心手段&#xff0c;涉及从源代码到机器码的多层次转换&#xff0c;下面从优化级别、常用技术、内存管理、指令调度等多个维度详细介绍。 2.编译器优化等级&#xff08;GCC/Clang&#xff09; 二.常用优化技术 1…

Seq2Seq理解

Seq2Seq理解 写在前面&#xff1a;学习Seq2Seq由于前面底子没打好导致理解起来非常困难&#xff0c;今天索性全部搞懂逻辑部分&#xff0c;后续我会把所学的一些算法全部以理解代码的形式发布出来&#xff0c;课程代码内容全部来自李沐老师的视频&#xff0c;再次感谢&#xf…

旅游规划智能体之ReAct Agent实战

引言 本文将系统性地介绍如何运用ReAct框架构建旅游规划智能体&#xff0c;通过LangChain的create_react_agent方法实现智能决策和多步骤任务处理。ReAct框架作为现代AI Agent开发的核心技术之一&#xff0c;为构建具备复杂推理能力的智能系统提供了重要的理论基础和实践指导。…

组合模式深度解析:Java设计模式实战指南与树形结构处理架构设计

组合模式深度解析&#xff1a;Java设计模式实战指南与树形结构处理架构设计 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用…

PHP设计模式实战:领域驱动设计与六边形架构

在前三篇关于电子商务系统、API服务和微服务架构的基础上,我们将深入探讨如何运用领域驱动设计(DDD)和六边形架构(Hexagonal Architecture)构建更加清晰、可维护的业务系统。随着业务复杂度增加,传统的分层架构往往难以清晰地表达业务逻辑,而DDD提供了一套方法论来解决这一问…

为什么在1080p的屏幕下,通常观看4K视频要比1080p的视频来的清晰?

一、分辨率与像素密度的底层逻辑 4K与1080p的像素差异 4K分辨率通常为38402160&#xff08;约830万像素&#xff09;&#xff0c;而1080p为19201080&#xff08;约207万像素&#xff09;&#xff0c;4K像素数量是1080p的4倍。当4K视频在1080p屏幕上播放时&#xff0c;需要将4倍…

C++ Json-Rpc框架 项目逻辑设计

Server • RpcServer&#xff1a;rpc功能模块与⽹络通信部分结合 RpcServer分为两部分 1.提供函数调用服务的服务端 2.提供服务注册的客户端 对内提供好rpc服务的路由关系管理map<method,服务描述对象>&#xff0c;以及rpc请求消息的分发处理函数。给Dispatcher提供onRpc…

Agent开发相关工具

LangChain LangChain LangGraph LangGraph LangSmith GraphRAG RAGFlow what-is-graphrag Dify n8n vLLM Model Context Protocol AutoGen CodeMirror Milvus Chroma

进程管理(一)

一. 进程的基本信息 1.1 进程的概念、组成及信息 1.1.1 概念 进程的概念与程序相对&#xff0c;程序是静态的而进程是动态的&#xff0c;一个程序执行多次会有多个不同的进程 1.1.2 组成 PCB&#xff08;程序控制块&#xff09;&#xff1a; 是一种保存下列信息的数据结构&…

k8s 中 cpu 核数的理解

物理核还是逻辑核 在 Kubernetes&#xff08;k8s&#xff09;编排文件&#xff08;如 Pod 或 Deployment 的 YAML 文件&#xff09;中设置的 CPU 核数&#xff0c;针对的是逻辑核数&#xff08;Logical Cores&#xff09;&#xff0c;而非物理核数&#xff08;Physical Cores&…

arcpy数据分析自动化(2)

数据处理 在提取数据后&#xff0c;我们需要对字段进行标准化处理&#xff0c;例如统一土地利用类型的命名。 # 定义字段映射字典 field_mapping {"Residential": "居住用地","Commercial": "商业用地","Industrial": &q…

在VMware虚拟机集群中,完成Hive的安装部署

Hive是分布式运行的框架还是单机运行的&#xff1f; Hive是单机工具&#xff0c;只需要部署在一台服务器即可。 Hive虽然是单机的&#xff0c;但是它可以提交分布式运行的MapReduce程序运行。 我们知道Hive是单机工具后&#xff0c;就需要准备一台服务器供Hive使用即可。 同…

Linux运维新人自用笔记(部署 ​​LAMP:Linux + Apache + MySQL + PHP、部署discuz论坛)

内容全为个人理解和自查资料梳理&#xff0c;欢迎各位大神指点&#xff01; 每天学习较为零散。 day19 简单搭建网站 下载apache服务 #下载阿帕奇服务 [rootxun ~]# yum install httpd -y#关闭防火墙 [rootxun ~]# iptables -F#启动服务 [rootxun ~]# systemctl start http…

Kubernetes架构解析

Kubernetes 技术栈的深度解析&#xff0c;涵盖架构设计、核心组件、生态工具及二次开发实践&#xff0c;结合实战案例说明其内在关联&#xff1a; 一、Kubernetes 架构设计 核心分层模型 #mermaid-svg-CnFwJbuzaABZpTBr {font-family:"trebuchet ms",verdana,arial…