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

Redis 基本数据类型总结及使用场景

1. 字符串(String)
  • 结构:最简单的键值对,支持文本、整数、浮点数或二进制数据(最大 512MB)。

  • 常用命令SETGETINCRDECRAPPENDSETNX

  • 使用场景

    • 缓存:存储用户会话、页面内容等。

    • 计数器:文章阅读量(INCR)、库存扣减(DECR)。

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

    • 短有效期数据:验证码(结合 EXPIRE)。


2. 列表(List)
  • 结构:双向链表,支持头部(Left)和尾部(Right)操作,元素可重复。

  • 常用命令LPUSH/RPUSHLPOP/RPOPLRANGEBLPOP(阻塞式弹出)。

  • 使用场景

    • 消息队列:生产者通过 LPUSH 推送任务,消费者通过 BRPOP 获取。

    • 最新动态:存储用户最新发布的文章(如 LPUSH + LTRIM 限制长度)。

    • 分页查询LRANGE 分页获取历史记录。


3. 哈希(Hash)
  • 结构:键值对集合,适合存储对象(如用户信息)。

  • 常用命令HSETHGETHMSETHGETALLHINCRBY

  • 使用场景

    • 对象存储:用户信息(HMSET user:1 name "Alice" age 30)。

    • 部分更新:修改用户单个字段(HSET user:1 age 31)。

    • 聚合统计:商品详情页的多属性缓存。


4. 集合(Set)
  • 结构:无序且唯一的元素集合,支持交并差运算。

  • 常用命令SADDSMEMBERSSINTER(交集)、SUNION(并集)、SISMEMBER

  • 使用场景

    • 标签系统:用户兴趣标签(SADD user:1:tags tech music)。

    • 去重:记录文章的唯一访问用户(SADD article:100:views user:1)。

    • 共同好友SINTER user:1:friends user:2:friends


5. 有序集合(Sorted Set / ZSet)
  • 结构:元素唯一,每个元素关联一个分数(Score),按分数排序。

  • 常用命令ZADDZRANGEZREVRANGEZRANKZINCRBY

  • 使用场景

    • 排行榜:游戏积分排名(ZADD leaderboard 1000 "PlayerA")。

    • 带权重队列:任务优先级调度(分数表示优先级)。

    • 时间轴:按时间戳排序的动态(ZADD timeline 1630000000 "event1")。


6. 其他扩展类型
6.1 位图(Bitmap)
  • 底层:基于字符串的位操作,支持按位存取。

  • 命令SETBITGETBITBITCOUNT

  • 场景:用户签到记录(每天对应一个位)、活跃用户统计。

6.2 HyperLogLog
  • 功能:基数统计(估算集合中不重复元素的数量)。

  • 命令PFADDPFCOUNTPFMERGE

  • 场景:统计 UV(独立访客数),误差率约 0.81%。

6.3 地理空间索引(Geospatial)
  • 底层:基于有序集合实现,存储经纬度。

  • 命令GEOADDGEODISTGEORADIUS

  • 场景:附近的人、商家地理位置查询。

6.4 流(Stream)
  • 功能:消息队列增强版,支持多消费者组、消息确认。

  • 命令XADDXREADXGROUP

  • 场景:分布式日志、事件溯源(类似 Kafka)。


数据类型选择建议

需求推荐类型示例
简单键值存储String缓存、计数器
对象属性存储Hash用户信息、商品详情
有序且可重复的数据集合List消息队列、最新动态列表
无序且唯一的数据集合Set标签、共同好友
需要排序的唯一数据集合Sorted Set排行榜、优先级队列
高效基数统计HyperLogLogUV 统计
地理位置服务Geospatial附近的人、商家查询
复杂消息队列Stream订单日志、事件流处理

总结

  • 优先根据业务逻辑选择数据结构,避免过度依赖字符串类型。

  • 组合使用数据结构:例如用 Sorted Set 存储排行榜,再用 Hash 缓存用户详情。

  • 注意内存优化:例如小对象用 Hash 比多个 String 更省内存。

相关文章:

  • 面试题02.02.返回倒数第k个节点
  • ALG(Alloy+Loki+Grafana)轻量级日志系统
  • var vs let 与 const
  • 求职面试常见问题:数组与链表
  • 2025DNS二级域名分发PHP网站源码
  • 阿里云操作系统控制台——ECS操作与性能优化
  • doris: PostgreSQL
  • c语言笔记 函数指针
  • K8S学习之基础九:k8s中pod的生命周期
  • Spark(5)host配置
  • 线上图片验证码性能优化base64编码
  • html播放本地音乐
  • 【HDLbits--FSM续(二)】
  • 游戏引擎学习第138天
  • R语言的基础命令及实例操作
  • sqlmap:从基础用法到漏洞利用实战
  • Zookeeper学习
  • 前端到AI,LangChain.Js(五)
  • DeepSeek V3 源码:从入门到放弃!
  • CInternetToolbar::_CommonHandleFileSysChange函数分析之CReBar::_IDToIndex函数的作用
  • 网站建设运营规划/2345网址导航手机版
  • 赌博游戏网站怎么做/怎么联系地推公司
  • 电商网站建设策划书模板/发布软文网站
  • 网站字体设计重要性/seo流量排行榜神器
  • 同一个ip的网站做链接有用/无锡网站制作无锡做网站
  • 网站模板被抄袭怎么办/seo销售话术开场白