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.rhkb.cn/news/498938.html

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

相关文章

如何将联系人从Android转移到 OPPO? [解决了]

概括 OPPO Reno4系列预计将于2020年10月1日上午9点30分举行线上发布会。从其官方预告片中我们不难发现,OPPO Reno4旗舰手机试图诠释梦想、挑战、勇气、自信和可能性。 3D曲面屏,图形流畅,机身更轻薄,色彩真实。听起来棒极了&…

[羊城杯 2024]不一样的数据库_2

题目描述: 压缩包6 (1).zip需要解压密码: 尝试用ARCHPR工具爆破一下: (字典可自行在github上查找) 解压密码为:753951 解压得到13.png和Kee.kdbx文件: 二维码图片看上去只缺了正常的三个角&…

MIT实验笔记冲刺3:页表操作(理论部分)

目录 分页硬件 内核地址空间 代码:创建地址空间 物理内存分配 代码:物理内存分配器 进程地址空间 代码:sbrk 代码:exec 实际的操作系统 这个实验将重点放到了我们的页表上,实际上,页表在我们上一个…

二、SQL语言,《数据库系统概念》,原书第7版

文章目录 一、概览SQL语言1.1 SQL 语言概述1.1.1 SQL语言的提出和发展1.1.2 SQL 语言的功能概述 1.2 利用SQL语言建立数据库1.2.1 示例1.2.2 SQL-DDL1.2.2.1 CREATE DATABASE1.2.2.2 CREATE TABLE 1.2.3 SQL-DML1.2.3.1 INSERT INTO 1.3 用SQL 语言进行简单查询1.3.1 单表查询 …

纯前端实现将pdf转为图片(插件pdfjs)

需求来源 预览简历功能在移动端,由于用了一层iframe把这个功能嵌套在了app端,再用一个iframe来预览,只有ios能看到,安卓就不支持,查了很多资料和插件,原理基本上都是用iframe实现的。最终转换思路&#xf…

【容器化技术 Docker 与微服务部署】详解

容器化技术 Docker 与微服务部署 一、容器化技术概述 (一)概念 容器化技术是一种操作系统级别的虚拟化方法,它允许将应用程序及其依赖项(如运行时环境、系统工具、库等)打包成一个独立的、可移植的单元,这…

【从零开始入门unity游戏开发之——C#篇43】C#补充知识——值类型和引用类型汇总补充、变量的生命周期与性能优化、值类型和引用类型组合使用

文章目录 一、值类型和引用类型汇总补充1、值类型和引用类型汇总2、值类型和引用类型的区别3、简单的判断值类型和引用类型 二、变量的生命周期与性能优化1、**栈和堆的区别**2、**变量生命周期**3、**垃圾回收(GC)机制**4、**代码示例与优化**4.1. 临时…

CSS2笔记

一、CSS基础 1.CSS简介 2.CSS的编写位置 2.1 行内样式 2.2 内部样式 2.3 外部样式 3.样式表的优先级 4.CSS语法规范 5.CSS代码风格 二、CSS选择器 1.CSS基本选择器 通配选择器元素选择器类选择器id选择器 1.1 通配选择器 1.2 元素选择器 1.3 类选择器 1.4 ID选择器 1.5 基…

小程序基础 —— 02 微信小程序账号注册

微信小程序账号注册 小程序开发与网页开发不一样,在开始微信小程序开发之前,需要访问微信公众平台,注册一个微信小程序账号。 有了小程序的账号以后,才可以开发和管理小程序,后续需要通过该账号进行开发信息的设置、…

LeetCode - 初级算法 数组(删除排序数组中的重复项)

免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…

Android使用DataBinding和Merge引发的血案

Android使用DataBinding和Merge引发的血案 1.前言: 相信Databinding和Merge大家都不陌生,今天讲解的是Databinding和Merge一起使用遇到的问题,在父布局使用,引用的布局使用Merge会导致id找不到,运行时直接崩溃了&…

SQLiteDataBase数据库

XML界面设计 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_paren…

04-微服务02

我们将黑马商城拆分为5个微服务&#xff1a; 用户服务 商品服务 购物车服务 交易服务 支付服务 由于每个微服务都有不同的地址或端口&#xff0c;相信大家在与前端联调的时候发现了一些问题&#xff1a; 请求不同数据时要访问不同的入口&#xff0c;需要维护多个入口地址…

智能家居体验大变革 博联 AI 方案让智能不再繁琐

1. 全球AI技术发展背景及智能家居市场趋势 人工智能&#xff08;AI&#xff09;技术的飞速发展正在推动全球各行业的数字化转型。国际电信联盟与德勤联合发布《人工智能向善影响》报告指出&#xff0c;全球94%的商界领袖认为&#xff0c;人工智能技术对于其企业在未来5年内的发…

Windows onnxruntime编译openvino

理论上来说&#xff0c;可以直接访问 ONNXRuntime Releases 下载 dll 文件&#xff0c;然后从官方文档中下载缺少的头文件以直接调用&#xff0c;但我没有尝试过。 1. 下载 OpenVINO 包 从官网下载 OpenVINO 的安装包并放置在 C:\Program Files (x86) 路径下&#xff0c;例如…

docker学习记录-部署若依springcloud项目

使用docker compse部署RuoYi v3.6.4 一、打包代码 Java代码 打包前需要将127.0.0.1改成宿主机ip&#xff0c; 使用docker部署的nacos&#xff0c;应该是要改成ruoyi-nacos&#xff08;docker中的服务容器名&#xff09;。 使用idea window系统可能没有sh命令&#xff0c;不能…

汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%

汽车损坏识别检测数据集&#xff0c;使用yolo&#xff0c;pasical voc xml&#xff0c;coco json格式标注&#xff0c;6696张图片&#xff0c;可识别11种损坏类型损坏&#xff1a; 前挡风玻璃&#xff08;damage-front-windscreen &#xff09; 损坏的门 &#xff08;damaged-d…

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中&#xff0c;右键单击项目名称&#xff0c;选择“管理 NuGet 包”。搜索并安装以下包&#xff1a; OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

Nature+Science=ONNs(光学神经网络)

2024深度学习发论文&模型涨点之——光学神经网络 光学神经网络&#xff08;Optical Neural Networks, ONNs&#xff09;是一种利用光学器件&#xff08;如激光、光学调制器、滤波器、探测器等&#xff09;来模拟和实现神经网络推理功能的计算模型。这种网络通过利用光信号的…

计算机体系结构期末复习3:GPU架构及控制流问题

目录 一、GPU设计思路 1.简化流水线、增加核数 2.单指令多线程&#xff08;SIMT&#xff09; 3.同时驻留大量线程 4.总思路&#xff1a;多线程单指令多线程 二、GPU的控制流问题 1.什么是控制流问题 2.怎么应对分支分歧 一、GPU设计思路 1.简化流水线、增加核数 2.单指…