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

server/2025/1/2 3:23:18/

前言: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.ppmy.cn/server/154389.html

相关文章

apt命令的理解

apt命令的理解 apt 是 Ubuntu 和其他基于 Debian 的 Linux 发行版中用于包管理的工具,它的全称是 Advanced Package Tool。 以下是对 apt 工作原理的详细解释: 1. 工作原理概述 apt 是一个包管理系统,用于管理二进制软件包和其依赖关系。它…

字符串函数和结构题内存对齐

图下为函数使用&#xff1a; #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }

银河麒麟操作系统安装达梦数据库(超详细)

目录 引言1. 前期准备1.1 安装麒麟系统1.2 下载达梦数据库安装包&#xff08;DM8&#xff09;1.3 上传安装包到麒麟系统1.4 挂载安装包&#xff08;iso&#xff09;文件1.5 配置安装用户和组1.6 创建安装路径及修改权限1.7 设置临时安装目录 2. 安装达梦数据库&#xff08;DM8&…

链式二叉树的基本操作,前序、中序以及后序遍历(递归实现,非递归实现)【有图解】

文章目录 结点设置二叉树的遍历前序、中序以及后序遍历 递归实现前序、中序以及后序遍历 非递归实现层序遍历 结点的个数叶子结点的个数第k层结点的个数值为x的结点树的最大深度二叉树的销毁 结点设置 既然是链式二叉树&#xff0c;那必须得有自己的结点类型&#xff0c;以下是…

从百度云网盘下载数据到矩池云网盘或者服务器内

本教程教大家如何快速将百度云网盘数据集或者模型代码文件下载到矩池云网盘或者服务器硬盘上。 本教程使用到了一个开源工具 BaiduPCS-Go&#xff0c;官方地址 &#xff1a; https://github.com/qjfoidnh/BaiduPCS-Go 这个工具可以实现“仿 Linux shell 文件处理命令的百度网…

Android学习19 -- NDK4--共享内存(TODO)

在安卓的NDK&#xff08;Native Development Kit&#xff09;中&#xff0c;C共享内存通常用于不同进程间的通信&#xff0c;或者在同一进程中多线程之间共享数据。这种方法相较于其他形式的IPC&#xff08;进程间通信&#xff09;来说&#xff0c;具有更高的性能和低延迟。共享…

React中常用的钩子

在当今&#xff0c;React的钩子写法已经逐渐成为了一种主流开发模式&#xff0c;本文将介绍几种在React中常用的钩子 useState 可以用来双向绑定&#xff0c;创建需要监听变化并且使用的数据 使用该钩子定义时&#xff0c;参数可以是一个直接定义好的变量&#xff0c;也可以是…

Linux | Ubuntu零基础安装 nvm 管理nodejs

目录 介绍 项目地址 前置工具 安装 查看环境配置 更新环境变量 查看版本 查看 nodejs包 列表 安装nodejs 查看 nvm 状态 测试 nodejs 介绍 nvm是什么&#xff1f;你可以把它理解成 nodejs的管理软件&#xff0c;方便快速切换nodejs的版本&#xff0c;达到兼容状态 …