当前位置: 首页 > 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 更省内存。

http://www.dtcms.com/a/54460.html

相关文章:

  • 面试题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函数的作用
  • Yocto Linux 量产 BSP 镜像定制
  • C++中避免重复虚函数的三大解决方案:以卡牌游戏开发为例
  • ArcGIS Pro:轻松制作地震动画,洞察灾害动态
  • Kubernetes全解析:从容器编排到云原生霸主
  • Arcgis中添加脚本工具箱
  • Java后端大厂高频面经——Java基础
  • *VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势
  • ​‌fpassthru($stream)‌ 是 PHP 中的一个函数​
  • 加速科技Flex10K-L测试机:以硬核创新重塑显示驱动芯片测试新标杆!
  • Ubuntu 24.04 配置ODBC连接ORACLE 11G数据库