Redis 数据类型全解析:基础与进阶应用场景

前言:Redis 是一个高性能的内存数据库,支持多种数据类型,能够高效处理各种场景的数据存储和操作。

  • 以下是Redis数据类型数据结构及其应用场景的详细说明:

基础数据类型

1. 字符串 (String)

底层数据结构
  • Simple Dynamic String (SDS):动态分配内存,支持高效的字符串操作,避免缓冲区溢出问题。
应用场景
  • 保存简单键值对数据:
    • 用户登录状态:SET user:123:status "online"
    • 配置参数:SET config:max_connections 1000
  • 计数器和计量数据存储:
    • 网站访问量统计:INCR page:home:views
  • 分布式锁:
    • 设置锁状态并指定过期时间:SET lock:resource123 "locked" EX 10
  • 短信验证码:
    • 存储验证码并设置过期时间:SET sms:code:123456 "7890" EX 300

2. 哈希 (Hash)

底层数据结构
  • 哈希表(Hash Table):用于存储字段较多的键值对。
  • 压缩列表(ZipList):当字段数量较少时,用于节省内存。
应用场景
  • 存储用户信息:
    • 用户名、邮箱等信息:HMSET user:123 username "JohnDoe" email "john@example.com"
  • 配置或属性数据存储:
    • 应用设置:HMSET app:settings theme "dark" notifications "enabled"
  • 在线购物车:
    • 存储购物车内容:HMSET cart:123 product1 2 product2 1

3. 列表 (List)

底层数据结构
  • 双向链表(Linked List):支持快速的两端插入和删除操作。
  • 压缩列表(ZipList):当列表数据量较小时使用,节省内存。
应用场景
  • 消息队列:
    • 消息生产者:LPUSH queue:messages "message1"
    • 消息消费者:RPOP queue:messages
  • 评论区按时间排序:
    • 新评论添加:LPUSH post:123:comments "Great post!"
    • 获取最新评论:LRANGE post:123:comments 0 9
  • 待办事项列表:
    • 添加任务:LPUSH todo:user:123 "task1"
    • 获取待处理任务:LRANGE todo:user:123 0 -1

4. 集合 (Set)

底层数据结构
  • 哈希表(Hash Table):无序存储集合中的元素。
  • 整数数组(IntSet):当集合元素均为整数且数量较小时使用。
应用场景
  • 标签或分类数据存储:
    • 用户兴趣标签:SADD user:123:tags "sports" "music"
  • 好友推荐:
    • 求共同好友:SINTER user:123:friends user:456:friends
  • 去重操作:
    • 记录访问过的 IP:SADD visited_ips "192.168.1.1"
  • 黑名单管理:
    • 添加黑名单用户:SADD blacklist "user123"

5. 有序集合 (Sorted Set)

底层数据结构
  • 跳表(SkipList):支持快速的范围查找和排序操作。
  • 压缩列表(ZipList):当数据量较小时使用。
应用场景
  • 排行榜:
    • 添加玩家分数:ZADD leaderboard 1500 player1
    • 获取前 10 名玩家:ZREVRANGE leaderboard 0 9 WITHSCORES
  • 实时热搜:
    • 更新关键词热度:ZINCRBY trending_keywords 1 "Redis"
    • 获取热门关键词:ZREVRANGE trending_keywords 0 9

特殊数据类型

1. 位图 (Bitmap)

底层数据结构
  • 位数组(Bit Array):基于字符串类型的位操作扩展。
应用场景
  • 用户行为统计:
    • 标记用户登录:SETBIT logins:2024-12-25 123 1
    • 统计当天活跃用户数:BITCOUNT logins:2024-12-25
  • 活动签到:
    • 标记用户签到:SETBIT event:checkin:123 1 1
    • 统计签到人数:BITCOUNT event:checkin:123

2. HyperLogLog

底层数据结构
  • 稀疏矩阵(Sparse Matrix):基于概率算法,内存占用小且适合估算基数。
应用场景
  • 独立用户统计:
    • 添加用户访问记录:PFADD unique_visitors "user123"
    • 估算总访问用户数:PFCOUNT unique_visitors
  • 广告曝光统计:
    • 添加曝光用户:PFADD ad:123 "user456"
    • 估算广告独立曝光量:PFCOUNT ad:123

3. Geo(地理空间数据)

底层数据结构
  • 有序集合 (Sorted Set):将地理位置编码为 GeoHash 并存储。
应用场景
  • 门店定位
    • 添加门店位置:GEOADD store_locations 116.397128 39.916527 "Store1"
    • 查询门店位置:GEOPOS store_locations "Store1"
    • 获取两个门店之间的距离:GEODIST store_locations "Store1" "Store2"
  • 用户地理分布
    • 添加用户位置:GEOADD user_locations 116.388213 39.929987 "user123"
    • 查询附近用户:GEORADIUS user_locations 116.397128 39.916527 500 km
  • 广告投放区域
    • 将广告区域用户位置加入:GEOADD ad_locations 116.396 39.915 "ad_user1"
    • 查询在某个区域内的用户数:GEORADIUSBYMEMBER ad_locations "ad_user1" 5 km COUNT 100

Redis 数据类型总结表

数据类型底层数据结构应用场景
字符串 (String)SDS (动态字符串)用户状态、配置参数、计数器、分布式锁、短信验证码…
哈希 (Hash)哈希表、压缩列表用户信息、应用设置、在线购物车…
列表 (List)双向链表、压缩列表消息队列、评论区排序、待办事项列表…
集合 (Set)哈希表、整数数组标签存储、共同好友计算、去重操作、黑名单管理…
有序集合 (Sorted Set)跳表、压缩列表排行榜、实时热搜…
位图 (Bitmap)位数组用户行为统计、活动签到…
HyperLogLog稀疏矩阵独立用户统计、广告曝光统计…
Geo (地理空间数据)有序集合门店定位、用户地理分布、广告投放区域…

结语:Redis 提供了丰富的基础数据类型和特殊数据类型,其底层数据结构设计精巧,使得 Redis 能够在不同场景中高效地解决数据存储和查询需求。根据具体需求选择合适的数据类型,可以充分发挥 Redis 的性能优势。

“如果此文章对您有帮助😏,帮我点个赞😊,感激不尽!”

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

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

相关文章

评分模型在路网通勤习惯分析中的应用——提出问题(1)

1、问题的由来、目标和意义 最近一段时间和公司其它业务部门讨论时,发现一个有趣的交通路网问题,车辆从S点行驶到V点共用时40分钟,这段时间内路网中的卡口摄像头识别到了车辆通过的信息。如下图所示: 设计师需要通过这些有限的路…

leetcode 面试经典 150 题:删除有序数组中的重复项

链接删除有序数组中的重复项题序号26题型数组解题方法双指针难度简单熟练度✅✅✅✅✅ 题目 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保…

提升生产力工具

VSCODE插件 干货:用好这13款VSCode插件,工作效率提升10倍 - 程序员柠檬 - 博客园 Sourcetrail Sourcetrail 是一个开源且免费的源码阅读工具,以其强大的代码导航、可视化及跨平台支持特性,成为开发者理解复杂代码库的得力助手。…

什么是 Git Hooks?

在团队开发中,当成员提交代码的描述信息不符合约定提交规范的时候,需要阻止当前的提交,而要实现这个目的,我们就需要先来了解一个概念,叫做 Git hooks,即Git 在执行某个事件之前或之后进行一些其他额外的操…

Go语言方法和接收器类型详解

Go语言方法和接收器类型详解 1. 方法接收器类型 1.1 值接收器 值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。 type Person struct …

MS SQL Server 实战 排查多列之间的值是否重复

目录 需求 范例运行环境 数据样本设计 功能实现 上传EXCEL文件到数据库 SQL语句 小结 需求 在日常的应用中,排查列重复记录是经常遇到的一个问题,但某些需求下,需要我们排查一组列之间是否有重复值的情况。比如我们有一组题库数据&am…

抖去推碰一碰系统技术源码/open SDK转发技术开发

抖去推碰一碰系统技术源码/open SDK转发技术开发 碰一碰智能系统#碰碰卡系统#碰一碰系统#碰一碰系统技术源头开发 碰碰卡智能营销系统开发是一种集成了人工智能和NFC技术的工具,碰碰卡智能营销系统通过整合数据分析、客户关系管理、自动化营销活动、多渠道整合和个…

redis优化

在高并发、高性能、高可用系统中,Redis 的优化至关重要。以下是一些在面试中可以详细说明的 Redis 优化策略,以及具体的实践经验和技术亮点: 1. 数据模型与结构设计优化 使用合适的数据结构 :根据业务需求选择合适的 Redis 数据结…

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤,做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…

探索与决策的完美结合:Actor-Critic 方法及其衍生算法

引言 在强化学习领域,如何让智能体学会做出最优决策是一个关键问题。Actor-Critic 方法提供了一种高效的解决方案,它结合了策略梯度(Actor)和值函数(Critic)的优点,使智能体能够在复杂的环境中…

未来网络技术的新征程:5G、物联网与边缘计算(10/10)

一、5G 网络:引领未来通信新潮流 (一)5G 网络的特点 高速率:5G 依托良好技术架构,提供更高的网络速度,峰值要求不低于 20Gb/s,下载速度最高达 10Gbps。相比 4G 网络,5G 的基站速度…

数据交易和联邦学习的背景下的安全属性

数据交易和联邦学习的背景下的安全属性 在数据交易和联邦学习的背景下,安全属性对于保护数据隐私、确保系统可靠性和维护交易公平性至关重要。以下将分析文章中涉及的安全属性以及分析这些属性的目的。 涉及的安全属性 双向认证:文章虽未明确提及传统意义上的双向认证机制,…

QWT 之 QwtPlotDirectPainter直接绘制

QwtPlotDirectPainter 是 Qwt 库中用于直接在 QwtPlot 的画布上绘制图形的一个类。它提供了一种高效的方法来实时更新图表,特别适合需要频繁更新的数据可视化应用,例如实时数据流的显示。 使用 QwtPlotDirectPainter 的主要优势在于它可以绕过 QwtPlot 的…

改变HTML元素的方式有哪些?如何在HTML中添加/替换或删除元素?

使用 JavaScript 的 DOM 操作 如果想要修改元素的样式,就要先获取元素之后再进行下一步操作 获取元素:可以使用等方法获取到需要操作的 HTML 元素。 document.getElementById() document.getElementsByClassName() document.getElementsByTagName() d…

SuperMap iClient3D for Cesium等高线标注

kele 前言 在三维地形分析中,等高线分析是一种非常重要的分析方法,它能直观的表达出地形的高低起伏特征,在三维系统中受到广泛应用。在SuperMap iClient3D for Cesium中,等高线分析是前端GPU分析,能够分析并渲染出等高…

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中,x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步,更承载着无数创新者的梦想与努力。 x86:从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年,英特尔(…

红魔电竞PadPro平板解BL+ROOT权限-KernelSU+LSPosed框架支持

红魔Padpro设备目前官方未开放解锁BL,也阉割了很多解锁BL指令,造成大家都不能自主玩机。此规则从红魔8开始,就一直延续下来,后续的机型大概率也是一样的情况。好在依旧有开发者进行适配研究,目前红魔PadPro平板&#x…

TCP Analysis Flags 之 TCP Out-Of-Order

前言 默认情况下,Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态,并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时,会对每个 TCP 数据包进行一次分析,数据包按照它们在数据包列表中出现的顺序进行处理。可…

<数据集>风力发电机损伤识别数据集<目标检测>

数据集下载链接 <数据集>风力发电机损伤识别数据集<目标检测>https://download.csdn.net/download/qq_53332949/90187097数据集格式:VOCYOLO格式 图片数量:2527张 标注数量(xml文件个数):252…

C++ 设计模式:工厂方法(Factory Method)

链接:C 设计模式 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 原型模式 链接:C 设计模式 - 建造者模式 工厂方法(Factory Method)是创建型设计模式之一,它提供了一种创建对象的接口&#xf…