当前位置: 首页 > article >正文

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.kler.cn/a/456307.html

相关文章:

  • C++ 设计模式:策略模式(Strategy Pattern)
  • 基于python的扫雷游戏
  • 嵌入式入门Day34
  • 通过百度api处理交通数据
  • 【黑马头条训练营】day02-黑马头条-App端文章展示
  • 【Rust自学】7.4. use关键字 Pt.1:use的使用与as关键字
  • 【PHP】部署和发布PHP网站到IIS服务器
  • 如何安全删除 GitHub 提交记录及其操作步骤
  • 2848、与车相交的点
  • Kafka 数据传输的事务类型
  • SLES网络
  • 【机器学习(九)】分类和回归任务-多层感知机(Multilayer Perceptron,MLP)算法-Sentosa_DSML社区版 (1)111
  • 机器学习随机森林回归时间序列预模型中时间滑动窗口作用以及参数设置
  • 基于openEuler22.09部署OpenStack Yoga云平台(一)
  • 《机器视觉:开启智能新时代》
  • MySQL学习之表查询操作
  • Express.js 有哪些常用的中间件?
  • 【Flutter_Web】Flutter编译Web第三篇(网络请求篇):dio如何改造方法,变成web之后数据如何处理
  • 【Java】线程相关面试题 (基础)
  • 工业安全监测审计系统(源码+文档+部署+讲解)
  • 【我的 PWN 学习手札】IO_FILE 之 stdout任意地址读
  • 普通的树形数据primevue的treetable组件的treetable[ ]
  • android系统查找应用包名以及主activity:
  • WPF 绘制过顶点的圆滑曲线(样条,贝塞尔)
  • 创建用于预测序列的人工智能模型,用Keras Tuner探索模型的超参数。
  • PDF书籍《手写调用链监控APM系统-Java版》第8章 插件与链路的结合:Gson插件实现