Redis 中常见的数据类型有哪些?

Redis 常见的数据类型包括 5 种基础类型(String、Hash、List、Set、Zset)和 3 种特殊类型(HyperLogLog、Bitmap、Geospatial)。以下是详细说明:

一、5 种基础数据类型

1. 字符串(String)
  • 特点
    • 二进制安全,可存储任意格式数据(如文本、JSON、图片二进制流)。
    • 支持原子性操作(如 INCR/DECR 计数器)。
    • 最大容量为 512MB。
  • 应用场景
    • 缓存简单键值对(如用户 Token、配置信息)。
    • 分布式锁(通过 SETNX 命令)。
    • 限流计数器(如接口请求次数限制)。
2. 哈希(Hash)
  • 特点
    • 键值对集合,适合存储对象(如用户信息、商品属性)。
    • 字段可独立操作(如修改 HSET user:1 name "Alice" 中的 name 字段)。
    • 内存优化:少量字段用压缩列表(ZipList),大量字段转哈希表。
  • 应用场景
    • 存储结构化数据(如用户年龄、昵称)。
    • 对象级更新(避免全量序列化开销)。
3. 列表(List)
  • 特点
    • 有序字符串集合,支持两端快速插入/删除(LPUSH/RPUSHLPOP/RPOP)。
    • 底层实现:双向链表(Redis 3.2 前)或快速列表(QuickList,结合链表和压缩列表)。
  • 应用场景
    • 消息队列(生产者-消费者模型)。
    • 最新动态列表(如社交媒体时间线)。
    • 分页查询(通过 LRANGE 获取子集)。
4. 集合(Set)
  • 特点
    • 无序唯一字符串集合,支持交集、并集、差集操作(如 SINTER/SUNION)。
    • 底层实现:哈希表(确保唯一性)。
  • 应用场景
    • 标签系统(如用户兴趣标签去重)。
    • 社交关系(如共同好友计算)。
    • 抽奖系统(随机选取不重复用户)。
5. 有序集合(Zset/Sorted Set)
  • 特点
    • 唯一字符串集合,每个元素关联一个分数(Score),按分数排序。
    • 支持范围查询(如 ZRANGEBYSCORE 获取排名区间)。
    • 底层实现:跳表(SkipList)或压缩列表。
  • 应用场景
    • 排行榜(如游戏积分、直播打赏)。
    • 延迟队列(按执行时间排序任务)。
    • 地理位置范围查询(结合 GEO 类型)。

二、3 种特殊数据类型

1. HyperLogLog
  • 特点
    • 概率性数据结构,用于近似计算唯一元素数量(如 UV 统计)。
    • 内存占用极低(12KB 可统计 2^64 个唯一值)。
  • 应用场景
    • 大规模去重统计(如日活用户数)。
2. Bitmap(位图)
  • 特点
    • 基于字符串的位操作,支持设置/获取位(SETBIT/GETBIT)。
    • 适合海量布尔值存储(如用户签到状态)。
  • 应用场景
    • 用户行为统计(如连续签到天数)。
    • 权限位掩码(如角色权限控制)。
3. Geospatial(地理空间)
  • 特点
    • 存储地理坐标(经纬度),支持附近位置查询(如 GEORADIUS)。
    • 底层实现:有序集合(按距离排序)。
  • 应用场景
    • LBS 服务(如附近商家、路径规划)。

三、其他数据类型

  • Stream(流):Redis 5.0 引入,支持消息队列和消费者组功能,弥补 List 在消息可靠性上的不足。

总结

Redis 通过丰富的数据类型,覆盖了从简单缓存到复杂结构化数据的多样化需求。合理选择数据类型可显著提升性能并简化开发逻辑。例如:

  • 简单缓存选 String
  • 对象存储选 Hash
  • 唯一值集合选 Set
  • 排序场景选 Zset
  • 大规模去重统计选 HyperLogLog

我正在编程导航学习项目课程,和其他编程爱好者一起交流进步,你也一起来吧
点击进入

你可能感兴趣的:(春招热门面试题,redis,数据库,缓存)