redis 常用数据类型及使用场景

Redis 支持多种数据类型,每种类型适用于不同的业务场景。以下是 Redis 常用数据类型及其典型应用场景的总结:

一、五种常用数据类型

1. 字符串(String)

  • 特点
    最基础的数据类型, 用于存储简单的键值对。可存储任意格式的数据(文本、二进制、序列化对象),最大支持 512MB。

  • 应用场景

    • 缓存:存储热点数据(如页面内容、用户会话)。
      SET user:1001:name "Alice"
      
    • 计数器:文章阅读量、库存扣减、点赞数等。
      INCR article:views:1001
      
    • 分布式锁:通过 SETNX 实现简单锁机制。
      SETNX lock:resource "1"
      
    • 短链存储:Key 为短码,Value 为原始 URL。
      SET short:abc123 "https://example.com"
      

2. 哈希(Hash)

  • 特点
    键值对集合,适合存储对象或结构化数据,支持字段级别的增删改查。
  • 应用场景
    • 用户信息存储:将用户属性(如 name、age)存储在一个 Hash 中。
      HSET user:1001 name "Alice" age 25
      
    • 购物车管理:记录用户购物车中的商品及数量。
      HSET cart:uid product_id_1 2
      
    • 配置管理:动态更新配置字段(如系统参数)。
      HSET config:site theme "dark"
      

3. 列表(List)

  • 特点

    双向链表结构,支持两端插入/弹出操作,实现队列或栈。
    用于存储一系列有序的字符串元素。

  • 应用场景

    • 消息队列:生产者用 LPUSH,消费者用 RPOPBRPOP
      LPUSH queue:task "task1"
      BRPOP queue:task 0
      
    • 最新消息排行:存储微博的 Timeline 或新闻的最新 N 条数据。
      LPUSH news:latest "Article A"
      LRANGE news:latest 0 9
      
    • 分页查询:通过 LRANGE 获取历史记录的分页数据。

4. 集合(Set)

  • 特点
    存储无序的、唯一的字符串集合,支持交集、并集、差集等操作。

  • 应用场景

    • 标签系统:通过集合运算实现标签的组合与过滤。
      SADD tags:article1 "redis" "database"
      SINTER tags:article1 tags:article2
      
    • 好友关注系统:存储用户的粉丝列表和共同关注。
      SADD followers:user1 userA userB
      SDIFF followers:user1 followers:user2
      
    • 抽奖池:随机选取不重复的用户。
      SRANDMEMBER users:pool 5
      

5. 有序集合(Sorted Set)

  • 特点
    每个元素关联一个分数(score),按分数排序,支持范围查询。
  • 应用场景
    • 排行榜:游戏积分榜、热门文章排名。
      ZADD leaderboard 1000 userA 950 userB
      ZRANGE leaderboard 0 -1 WITHSCORES
      
    • 定时任务调度:按时间戳排序待执行任务。
      ZADD tasks:pending 1719523200 task1
      ZRANGEBYSCORE tasks:pending -inf $(date +%s)
      

二、特殊数据类型

1、位图(Bitmaps)

  • 特点
    位图操作,每个位(bit)存储 0 或 1,节省空间。
    用于存储二进制数据,可以进行位级别的操作,如设置、清除、取反等。

适用于统计活跃用户、签到情况等场景。

  • 应用场景
    • 用户活跃统计:记录用户每日登录状态(1 表示登录)。
      SETBIT user:1001:2025-06-28 1
      BITCOUNT user:1001:2025-06-28
      

2、超日志(HyperLogLog)

  • 特点
    用于提供在统计学上独特的元素数量的近似计算。
    非常适合于大规模数据集的去重计数,且在内存占用上非常高效。
  • 应用场景
    • UV 统计:估算网站独立访问用户数。
      PFADD uv:2025-06-28 user1 user2
      PFCOUNT uv:2025-06-28
      

3、地理空间索引(Geospatial Indexes)

  • 特点
    存储地理坐标,支持距离计算和范围查询。
  • 应用场景
    • 附近的人:查找附近的商家或用户。
      GEOADD locations 116.397428 39.90923 "Beijing"
      GEORADIUS locations 116.397428 39.90923 100 km
      

4、流(Streams)

  • 特点
    高性能的消息流数据结构,用于存储消息序列,支持消息持久化、消息消费确认等功能。

适用于需要持久化日志和消息队列的场景。

  • 应用场景
    • 日志收集:实时采集和处理系统日志。
      XADD logs * message "Error: Disk full"
      XREAD STREAMS logs 0
      

三、总结对比

数据类型结构特点典型场景示例命令
String简单键值对缓存、计数器、分布式锁SET, INCR, SETNX
Hash字段-值集合对象存储、购物车HSET, HGET
List双向链表消息队列、分页LPUSH, LRANGE
Set无序唯一集合标签、抽奖、交集SADD, SINTER
Sorted Set分数排序集合排行榜、定时任务ZADD, ZRANGE
Bitmap位图用户活跃、签到SETBIT, BITCOUNT
HyperLogLog基数估算UV 统计PFADD, PFCOUNT
Geo地理坐标附近的人GEOADD, GEORADIUS
Stream消息流日志采集XADD, XREAD

四、选择建议

  • 简单存储:优先使用 StringHash
  • 有序集合:需要排序的场景(如排行榜)选择 Sorted Set
  • 去重集合:使用 SetHyperLogLog
  • 消息队列ListStream
  • 空间优化BitmapHyperLogLog

根据业务需求选择合适的数据类型,可充分发挥 Redis 的高性能优势!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值