Redis 数据类型与操作完全指南
Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。与传统的关系型数据库不同,Redis 提供了丰富的数据类型和灵活的操作方式,这使得它能够高效地解决各种不同场景下的数据存储和处理问题。本文将全面介绍 Redis 的九种核心数据类型及其操作,帮助开发者更好地理解和应用 Redis。
一、Redis 数据类型概述
Redis 之所以强大,很大程度上得益于它丰富的数据类型支持。每种数据类型都针对特定的使用场景进行了优化:
-
String(字符串):最基本的数据类型,可以包含任何数据
-
Hash(哈希):键值对集合,适合存储对象
-
List(列表):简单的字符串列表,按插入顺序排序
-
Set(集合):无序的字符串集合,元素唯一不重复
-
Sorted Set(有序集合):与集合类似,但每个元素关联一个分数
-
HyperLogLog:用于基数统计的数据结构
-
Geospatial(地理空间):存储地理位置信息
-
Bitmap(位图):通过位操作实现的特殊字符串
-
Stream(流):Redis 5.0引入的新数据类型,用于消息队列
这些数据类型使得 Redis 能够满足从简单缓存到复杂实时分析等各种应用场景的需求。
二、字符串(String)类型详解
2.1 基本特性
字符串是 Redis 最基本的数据类型,一个键最大能存储 512MB 的数据。字符串类型是二进制安全的,这意味着它可以包含任何数据,比如 JPEG 图片或序列化的对象。
2.2 常用操作命令
-
设置与获取:
SET key value [EX seconds] [PX milliseconds] [NX|XX] GET key
SET
命令支持多种选项:EX
设置过期时间(秒),PX
设置过期时间(毫秒),NX
只在键不存在时设置,XX
只在键已存在时设置。 -
数值操作:
INCR key # 将键的值增加1 DECR key # 将键的值减少1 INCRBY key increment # 将键的值增加指定数值 DECRBY key decrement # 将键的值减少指定数值
-
其他操作:
APPEND key value # 追加值到字符串末尾 STRLEN key # 获取字符串长度 GETRANGE key start end # 获取子字符串 SETRANGE key offset value # 覆盖部分字符串
2.3 使用场景
-
缓存:存储用户会话、页面内容等
-
计数器:网站访问量统计、点赞数等
-
分布式锁:利用 SET 的 NX 选项实现
-
限速器:限制 API 调用频率
三、哈希(Hash)类型详解
3.1 基本特性
哈希类型是一个键值对集合,特别适合存储对象。一个哈希可以存储多达 2³² - 1 个字段-值对。
3.2 常用操作命令
-
基本操作:
HSET key field value [field value ...] HGET key field HDEL key field [field ...] HEXISTS key field
-
批量操作:
HMSET key field value [field value ...] # 已废弃,推荐使用 HSET HMGET key field [field ...] HGETALL key
-
其他操作:
HKEYS key # 获取所有字段名 HVALS key # 获取所有字段值 HLEN key # 获取字段数量 HINCRBY key field increment # 增加字段的数值
3.3 使用场景
-
用户信息存储:将用户ID作为键,用户属性作为字段
-
商品信息存储:商品ID作为键,商品详情作为字段
-
配置存储:系统配置项的集中存储
四、列表(List)类型详解
4.1 基本特性
Redis 列表是简单的字符串列表,按照插入顺序排序。可以在列表的头部(左边)或尾部(右边)添加元素。一个列表最多可以包含 2³² - 1 个元素。
4.2 常用操作命令
-
插入操作:
LPUSH key value [value ...] # 从左侧插入 RPUSH key value [value ...] # 从右侧插入 LINSERT key BEFORE|AFTER pivot value # 在指定元素前后插入
-
删除操作:
LPOP key # 从左侧弹出 RPOP key # 从右侧弹出 LREM key count value # 移除指定元素 LTRIM key start stop # 修剪列表
-
查询操作:
LRANGE key start stop # 获取范围内的元素 LLEN key # 获取列表长度 LINDEX key index # 通过索引获取元素
4.3 使用场景
-
消息队列:LPUSH + RPOP 实现队列,LPUSH + LPOP 实现栈
-
最新消息列表:存储最新的N条消息
-
记录用户操作历史:用户最近的操作记录
五、集合(Set)类型详解
5.1 基本特性
Redis 的 Set 是 String 类型的无序集合,集合成员是唯一的,不允许重复。集合是通过哈希表实现的,所以添加、删除、查找的复杂度都是 O(1)。
5.2 常用操作命令
-
基本操作:
SADD key member [member ...] # 添加元素 SREM key member [member ...] # 移除元素 SISMEMBER key member # 检查元素是否存在 SMEMBERS key # 获取所有元素 SCARD key # 获取元素数量
-
集合运算:
SINTER key [key ...] # 交集 SUNION key [key ...] # 并集 SDIFF key [key ...] # 差集
-
随机元素:
SRANDMEMBER key [count] # 获取随机元素 SPOP key [count] # 随机移除元素
5.3 使用场景
-
标签系统:为对象添加多个标签
-
好友关系:共同好友、可能认识的人
-
唯一计数器:统计独立IP访问量
-
抽奖系统:使用 SPOP 实现随机抽奖
六、有序集合(Sorted Set)详解
6.1 基本特性
有序集合与普通集合类似,但每个元素都会关联一个 double 类型的分数(score)。Redis 正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数可以重复。
6.2 常用操作命令
-
基本操作:
ZADD key [NX|XX] [CH] [INCR] score member [score member ...] ZREM key member [member ...] ZCARD key ZSCORE key member
-
范围查询:
ZRANGE key start stop [WITHSCORES] ZREVRANGE key start stop [WITHSCORES] ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]
-
排名操作:
ZRANK key member # 升序排名 ZREVRANK key member # 降序排名
6.3 使用场景
-
排行榜系统:游戏积分排行榜、热搜榜
-
带权重的队列:优先级队列
-
范围查询:查找分数在某个区间的元素
七、高级数据类型
7.1 HyperLogLog
HyperLogLog 是一种用于基数统计的算法,特点是占用内存固定(12KB),可以计算接近 2⁶⁴ 个不同元素的基数。
常用命令:
PFADD key element [element ...]
PFCOUNT key [key ...]
PFMERGE destkey sourcekey [sourcekey ...]
使用场景:
-
统计网站独立访客(UV)
-
统计搜索关键词数量
7.2 地理空间(Geospatial)
Redis 3.2 版本新增的地理空间数据类型,可以存储地理位置信息,并计算位置间的距离、查找半径内的位置等。
常用命令:
GEOADD key longitude latitude member [longitude latitude member ...]
GEOPOS key member [member ...]
GEODIST key member1 member2 [unit]
GEORADIUS key longitude latitude radius unit [WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count]
使用场景:
-
附近的人
-
查找附近的餐厅、商店
-
计算两地距离
7.3 位图(Bitmap)
位图不是实际的数据类型,而是定义在字符串类型上的一组面向位的操作。由于字符串是二进制安全的,最大长度为 512MB,所以位图可以设置多达 2³² 个不同的位。
常用命令:
SETBIT key offset value
GETBIT key offset
BITCOUNT key [start end]
BITOP operation destkey key [key ...]
使用场景:
-
用户签到系统
-
活跃用户统计
-
布隆过滤器实现
7.4 流(Stream)
Redis 5.0 引入的新数据类型,主要用于消息队列,支持多播消息、消费者组等功能。
常用命令:
XADD key ID field value [field value ...]
XLEN key
XRANGE key start end [COUNT count]
XREAD [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
XGROUP CREATE key groupname ID
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] STREAMS key [key ...] ID [ID ...]
使用场景:
-
消息队列
-
事件溯源
-
实时数据处理
八、数据类型选择建议
选择合适的数据类型对于 Redis 性能至关重要。以下是一些选择建议:
-
简单键值存储:使用 String
-
对象存储:使用 Hash
-
需要排序的元素集合:使用 Sorted Set
-
唯一值集合:使用 Set
-
队列/栈:使用 List
-
基数统计:使用 HyperLogLog
-
地理位置:使用 Geospatial
-
位操作:使用 Bitmap
-
消息队列:使用 Stream
九、性能优化建议
-
合理设置过期时间:避免不必要的内存占用
-
使用批量操作:减少网络往返时间
-
避免大键:单个键过大(如包含百万元素的集合)会影响性能
-
使用 Pipeline:批量执行命令
-
选择合适的数据编码:Redis 会自动优化内部编码
总结
Redis 丰富的数据类型使其成为解决各种数据存储和处理问题的强大工具。理解每种数据类型的特点和适用场景,能够帮助开发者设计出更高效的 Redis 数据模型。在实际应用中,往往需要结合多种数据类型来解决复杂问题。掌握这些数据类型及其操作命令,是高效使用 Redis 的基础。
随着 Redis 版本的更新,还会不断有新的数据类型和功能加入。建议开发者关注 Redis 的官方文档和更新日志,及时了解最新的特性和最佳实践。
相关文章:

Redis 数据类型与操作完全指南
Redis 是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。与传统的关系型数据库不同,Redis 提供了丰富的数据类型和灵活的操作方式,这使得它能够高效地解决各种不同场景下的数据存储和处理问题。本文将全面介绍 R…...

Digi XBee XR 系列介绍
Digi 延续了 20 多年来亚 GHz 射频模块的传统,推出了 Digi XBee XR 系列远距离模块,包括 Digi XBee XR 900 - 已通过多个地区的预先认证 - 以及 Digi XBee XR 868 - 已通过欧洲地区应用的预先认证。 这些先进的射频模块专为远距离抗干扰无线通信而设计。…...

【方法论】金字塔原理概述:写作逻辑的底层架构与实践法则
文章目录 一、为何采用金字塔结构:对抗认知局限的思维框架1、 梳理逻辑,抽象归纳2、自上而下,结论居首3、 结论先行之必要 三、金字塔结构1、纵向逻辑:上层思想必须是下层思想的概括提炼2、横向逻辑:每组思想需属于同一…...
深入探索 OpenCV:从实时视频流到图像处理的实战指南
引言 在当今数字化时代,计算机视觉技术正逐渐成为推动科技发展的核心力量之一。从自动驾驶汽车到智能家居设备,从医疗影像诊断到工业自动化,计算机视觉的应用无处不在。而 OpenCV(Open Source Computer Vision Library࿰…...

BERT 核心技术全解析:Transformer 双向编码与掩码语言建模的底层逻辑
一、引言:从 BERT 到生成式 AI 的进化之路 科学的突破从来不是孤立的奇迹,而是人类知识长河中无数基石的累积。 当我们惊叹于 ChatGPT、Google Bard 等大型语言模型(LLM)在生成式 AI 领域的惊人表现时,不能不回溯到 20…...

【OpenCV基础 1】几何变换、形态学处理、阈值分割、区域提取和脱敏处理
目录 一、图像几何变化 1、对图片进行放大、缩小、水平放大和垂直放大 2、旋转、缩放、控制画布大小 二、图像形态学处理 1、梯度运算 2、闭运算 3、礼帽运算 4、黑帽运算 三、图像阈值分割 1、二值化处理 2、反二值化处理 3、截断阈值处理 4、超阈值零处理 5、低…...

CSS- 4.4 固定定位(fixed) 咖啡售卖官网实例
本系列可作为前端学习系列的笔记,代码的运行环境是在HBuilder中,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。 HTML系列文章 已经收录在前端专栏,有需要的宝宝们可以点击前端专栏查看! 点…...

得力标签打印机系统集成方案的技术应用与场景实践
一、方案背景与技术特性 在物联网设备管理场景中,标签打印的自动化与效率提升成为企业数字化升级的重要需求。得力标签打印机驱动及系统集成方案,通过技术接口开发与硬件协同,为设备标识管理提供 轻量化对接能力。以下从技术适配性与功能设计…...

【通用智能体】Playwright:跨浏览器自动化工具
Playwright:跨浏览器自动化工具 一、Playwright 是什么?二、应用场景及案例场景 1:端到端(E2E)测试场景 2:UI 自动化(表单批量提交)场景 3:页面截图与 PDF 生成场景 4&am…...
SmartETL函数式组件的设计与应用
SmartETL框架主要采用了面向对象的设计思想,将ETL过程中的处理逻辑抽象为Loader和Processor(对应loader模块和iterator模块),所有流程组件需要继承或实现DataProvider(iter方法)或JsonIterator(…...

精准掌控张力动态,重构卷对卷工艺设计
一、MapleSim Web Handling Library仿真和虚拟调试解决方案 在柔性材料加工领域,卷对卷(Roll-to-Roll)工艺的效率与质量直接决定了产品竞争力。如何在高动态生产场景中实现张力稳定、减少断裂风险、优化加工速度,是行业长期面临的…...
LlamaIndex中应用自定义提示词提升回答质量
在 LlamaIndex 中,get_response_synthesizer 允许你自定义生成回答的方式,包括传入自定义提示词(prompt)。可以通过 response_mode 和 text_qa_template 等参数来控制回答的生逻辑。在 LlamaIndex 中优化提示词(Prompt Template)可以显著提升回答质量。 一、使用自定义提…...
永磁同步电机公式总结【一】——反电动势、磁链、转矩公式;三项、两项电压方程;坐标表换方程
一、PMSM 电机参数介绍 1.1 转子极数 转子极数 (Rotor Poles) :三相交流电机每组线圈都会产生 N、S 磁极,每个电机每相含有的永磁体磁极个数就是极数。由于磁极是成对出现的,所以电机有 2、4、6、8……极 (偶数)。 未知参数的电机ÿ…...

STL - stack 和 queue 及容器适配器模式的介绍
文章目录 1. stack 的介绍和使用1.1 stack 的介绍1.2 stack 的接口及使用1.3 stack 的模拟实现 2. queue 的介绍和使用2.1 queue 的介绍2.2 queue 的接口及使用2.3 queue 的模拟实现 3. priority_queue的介绍和使用3.1 priority_queue 的介绍3.2 priority_queue 的接口及使用3.…...

windows 安装gdal实现png转tif,以及栅格拼接
windows 安装gdal实现png转tif,以及栅格拼接 一、安装gdal 网上有很多安装gdal的方法,此处通过osgeo4w安装gdal 1.下载osgeo4w 下载地址 https://trac.osgeo.org/osgeo4w/ 2、安装osgeo4w exe文件安装,前面部分很简单,就不再…...
量子计算在金融科技中的应用前景
随着量子计算技术的飞速发展,其在各行业的应用潜力逐渐显现,金融科技领域更是备受关注。量子计算的强大计算能力有望为金融行业带来前所未有的变革,从风险评估到投资组合优化,从高频交易到加密技术,量子计算都可能成为…...
OpenAI Chat API 详解:打造智能对话应用的基石
目录 OpenAI Chat API 详解:打造智能对话应用的基石参数概览核心参数详解与实战1. model: 选择你的 AI 大脑2. prompt: 指引 AI 的灵魂3. max_tokens: 控制输出的长度4. temperature 和 top_p: 调控创造力5. stop: 控制生成的结束6. presence_penalty 和 frequency_…...
JavaScript性能优化实战(12):大型应用性能优化实战案例
在前面的系列文章中,我们探讨了各种JavaScript性能优化技术和策略。本篇将聚焦于实际的大型应用场景,通过真实案例展示如何综合运用这些技术,解决复杂应用中的性能挑战。 目录 电商平台首屏加载优化全流程复杂数据可视化应用性能优化案例在线协作工具的实时响应优化移动端W…...

Socket.IO是什么?适用哪些场景?
Socket.IO 详细介绍及适用场景 一、Socket.IO 是什么? Socket.IO 是一个基于事件驱动的 实时通信库,支持双向、低延迟的客户端-服务器交互。它底层结合了 WebSocket 和 HTTP 长轮询 等技术,能够在不同网络环境下自动选择最优传输方式&#x…...

深度学习入门:卷积神经网络
目录 1、整体结构2、卷积层2.1 全连接层存在的问题2.2 卷积运算2.3 填充2.4 步幅2.5 3维数据的卷积运算2.6 结合方块思考2.7 批处理 3、池化层4、卷积层和池化层的实现4.1 4维数组4.2 基于im2col的展开4.3 卷积层的实现4.4 池化层的实现 5、CNN的实现6、CNN的可视化6.1 第一层权…...

【Odoo】Pycharm导入运行Odoo15
【Odoo】Pycharm导入运行Odoo15 前置准备1. Odoo-15项目下载解压2. PsrtgreSQL数据库 项目导入运行1. 项目导入2. 设置项目内虚拟环境3. 下载项目中依赖4. 修改配置文件odoo.conf 运行Pycharm快捷运行 前置准备 1. Odoo-15项目下载解压 将下载好的项目解压到开发目录下 2. …...

pytest框架 - 第二集 allure报告
一、断言assert 二、Pytest 结合 allure-pytest 插件生成美观的 Allure 报告 (1) 安装 allure 环境 安装 allure-pytest 插件:pip install allure-pytest在 github 下载 allure 报告文件 地址:Releases allure-framework/allure2 GitHub下载&#x…...

pycharm连接github(详细步骤)
【前提:菜鸟学习的记录过程,如果有不足之处,还请各位大佬大神们指教(感谢)】 1.先安装git 没有安装git的小伙伴,看上一篇安装git的文章。 安装git,2.49.0版本-CSDN博客 打开cmd(…...
Android日活(DAU)检测的四大实现方案详解
引言 日活跃用户(DAU)是衡量应用健康度的核心指标之一。在Android开发中,实现DAU统计需要兼顾准确性、性能和隐私合规。本文将详细介绍四种主流实现方案,并提供完整的代码示例和选型建议。 方案一:本地检测方案 核心…...
2021ICPC四川省赛个人补题ABDHKLM
Dashboard - The 2021 Sichuan Provincial Collegiate Programming Contest - Codeforces 过题难度: A K D M H B L 铜奖 5 594 银奖 6 368 金奖 8 755 codeforces.com/gym/103117/problem/A 模拟出牌的过程,打表即可 // Code Start Here int t…...

oracle linux 95 升级openssh 10 和openssl 3.5 过程记录
1. 安装操作系统,注意如果可以选择,选择安装开发工具,主要是后续需要编译安装,需要gcc 编译工具。 2. 安装操作系统后,检查zlib 、zlib-dev是否安装,如果没有,可以使用安装镜像做本地源安装&a…...
httpx[http2] 和 httpx 的核心区别及使用场景如下
httpx[http2] 和 httpx 的核心区别在于 HTTP/2 协议支持,具体差异及使用场景如下: 1. 功能区别 命令/安装方式协议支持额外依赖适用场景pip install httpx仅 HTTP/1.1无通用请求,轻量依赖pip install httpx[http2]支持 HTTP/2需安装 h2>3…...
Text models —— BERT,RoBERTa, BERTweet,LLama
BERT 什么是BERT? BERT,全称Bidirectional Encoder Representations from Transformers,BERT是基于Transformer的Encoder(编码器)结构得来的,因此核心与Transformer一致,都是注意力机制。这种…...

【AGI】大模型微调数据集准备
【AGI】大模型微调数据集准备 (1)模型内置特殊字符及提示词模板(2)带有系统提示和Function calling微调数据集格式(3)带有思考过程的微调数据集结构(4)Qwen3混合推理模型构造微调数据…...

新能源汽车制动系统建模全解析——从理论到工程应用
《纯电动轻卡制动系统建模全解析:车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象,系统解析制动系统建模核心参数优化方法,涵盖: 车速-阻力曲线拟合(MATLAB实现与模型验证&…...