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

Redis 常用数据结构及其对应的业务场景(总结)

1. String(字符串)

特点:最简单的键值对结构,可存储文本、数字或二进制数据(最大 512MB)。
适用场景

  • 缓存:存储用户信息、页面片段、商品详情等(如 SET user:1 "{name: 'Alice', age: 30}")。

  • 计数器:文章阅读量、点赞数(INCR article:1001:views)。

  • 分布式锁:通过 SETNX 实现简单锁机制。

  • 限速控制:如短信验证码发送频率(EXPIRE phone:138xxxx 60)。


2. Hash(哈希表)

特点:键值对集合,适合存储对象。
适用场景

  • 对象存储:用户属性(HSET user:1001 name "Bob" age 25),避免序列化开销。

  • 购物车:以用户ID为Key,商品ID为Field,数量为Value(HINCRBY cart:user1 item:123 1)。

  • 配置管理:存储系统的动态配置项。


3. List(列表)

特点:有序、可重复元素,支持双向操作(LPUSH/RPUSH)。
适用场景

  • 消息队列:简单版生产者消费者模型(LPUSH tasks "task1"RPOP tasks)。

  • 最新动态:朋友圈时间线(LPUSH feed:user1 "post:789",保留最近 N 条)。

  • 分页查询:文章评论列表(LRANGE comments:1001 0 9)。


4. Set(集合)

特点:无序、唯一元素,支持交并差集操作。
适用场景

  • 标签系统:文章标签(SADD article:1001:tags "tech" "redis")。

  • 好友关系:共同关注(SINTER user:1001:follows user:1002:follows)。

  • 去重统计:UV(独立访客)计算(SADD daily_uv "user1" "user2")。


5. Sorted Set(有序集合)

特点:元素按分数(Score)排序,唯一且可范围查询。
适用场景

  • 排行榜:游戏积分榜(ZADD leaderboard 1000 "player1"ZREVRANGE leaderboard 0 9)。

  • 延迟队列:用时间戳作为 Score,到期处理任务(ZADD delay_queue <timestamp> "task")。

  • 范围查询:价格区间内的商品(ZRANGEBYSCORE products 100 200)。


6. HyperLogLog(基数统计)

特点:极低内存估算大规模去重计数(误差约 0.81%)。
适用场景

  • UV统计:统计每日访问用户数(PFADD daily_uv "user1" "user2"PFCOUNT daily_uv)。


7. Bitmap(位图)

特点:通过位操作存储布尔值,节省空间。
适用场景

  • 签到打卡:记录用户每月签到(SETBIT sign:user1:202303 3 1 表示第3天签到)。

  • 特征标记:用户是否拥有某权限(位偏移代表权限ID)。


8. GEO(地理空间)

特点:基于 Sorted Set 实现地理位置查询。
适用场景

  • 附近的人:存储坐标并查询半径内的地点(GEOADD locations 116.40 39.90 "Beijing"GEORADIUS locations 116 39 100 km)。


9. Stream(流)

特点:持久化消息队列,支持消费者组。
适用场景

  • 事件溯源:订单状态变更日志(XADD orders * event "created" id 123)。

  • 异步任务:类似 Kafka 的轻量级消息队列。


选择建议:

  • 需要排序 → Sorted Set

  • 需要去重 → Set

  • 存储对象 → Hash

  • 高频读写 → String

  • 顺序性任务 → List 或 Stream

合理选择数据结构能显著提升性能和代码简洁性。例如,用 Hash 代替 String 存储对象可减少网络传输量,用 Sorted Set 实现排行榜比手动排序更高效。

相关文章:

  • R --- Error in library(***) : there is no package called ‘***’ (服务器非root用户)
  • 接口自动化进阶 —— Pytest全局配置pytest.ini文件详解!
  • 浏览器存储 IndexedDB
  • 蓝桥杯算法实战分享
  • CDN节点对网络安全扫描的影响:挑战与应对策略
  • 【Tauri2】004——run函数的简单介绍(2)
  • 【leetcode hot 100 84】柱状图中最大的矩形
  • LeetCode热题100题|1.两数之和,49.字母异位词分组
  • [WEB开发] Mybatis
  • CSP历年题解
  • Android 启动流程详解:从上电到桌面的全流程解析
  • Netty源码—7.ByteBuf原理四
  • K8s证书--运维之最佳选择(K8s Certificate - the best Choice for Operation and Maintenance)
  • 主键id设计
  • 华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )
  • 文件描述符,它在哪里存的,exec()后还存在吗
  • 【STM32】对stm32F103VET6指南者原理图详解(超详细)
  • 支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施
  • ✨分享我在飞书多维表格中使用DeepSeek的经历✨
  • STM32F103_LL库+寄存器学习笔记05 - GPIO输入模式,捕获上升沿进入中断回调
  • 中欧金融工作组第二次会议在比利时布鲁塞尔举行
  • 今年前4个月上海对拉美国家进出口总值增长2%
  • 济南市委副秘书长吕英伟已任历下区领导
  • 历史地理学者成一农重回母校北京大学,担任历史系教授
  • “海豚音”依旧互动更多,玛丽亚·凯莉本周来沪开唱
  • 复旦相辉堂上演原创历史人物剧《王淑贞》,胡歌参演