插件窝 干货文章 Redis内存数据类型有哪些?

Redis内存数据类型有哪些?

存储 bash 队列 数据 179    来源:    2025-03-28

Redis 提供了丰富的内存数据结构类型,每种类型针对不同场景设计。以下是主要数据类型及其特点详解:

  1. String(字符串)

    • 二进制安全,可存储文本/图片/序列化数据
    • 最大512MB
    • 特殊功能: bash SETEX key seconds value # 设置过期时间 INCR counter # 原子计数器 GETRANGE str 0 5 # 子字符串操作
  2. Hash(哈希表)

    • 字段值映射表,适合存储对象
    • 每个hash可存储2^32-1个键值对
    • 示例: bash HSET user:1000 name "John" age 30 HGETALL user:1000
  3. List(列表)

    • 双向链表结构
    • 常用作消息队列或最新消息存储
    • 典型操作: bash LPUSH news "latest news" RPOP orders # 队列消费 LTRIM hot 0 99 # 保持100条最新记录
  4. Set(集合)

    • 无序唯一元素集合
    • 支持交并差运算
    • 应用场景: bash SADD tags "redis" "database" SINTER user1:tags user2:tags # 共同标签
  5. Sorted Set(有序集合)

    • 带分数排序的Set
    • 实现排行榜的理想选择
    • 示例: bash ZADD leaderboard 100 "player1" ZREVRANGE leaderboard 0 9 # TOP10
  6. Bitmaps(位图)

    • 基于String的位操作
    • 适合布尔型大数据存储
    • 典型用例: bash SETBIT daily_active 20230101 1 # 标记活跃 BITCOUNT weekly_active # 统计活跃数
  7. HyperLogLog

    • 基数估算数据结构
    • 固定12KB内存可统计2^64个不重复元素
    • 使用方式: bash PFADD visitors "192.168.1.1" PFCOUNT visitors
  8. Geospatial(地理空间)

    • 基于Sorted Set实现的位置存储
    • 支持半径查询等操作
    • 示例: bash GEOADD cities 116.40 39.90 "Beijing" GEORADIUS cities 115 40 100 km
  9. Stream(流)

    • Redis 5.0+ 引入的消息队列结构
    • 支持消费者组和多播
    • 基本操作: bash XADD mystream * sensor-id 1234 temp 19.8 XREAD COUNT 2 STREAMS mystream 0

选型建议: - 缓存场景优先使用String - 对象存储使用Hash - 需要排序时选择Sorted Set - 精确去重用Set,大数据量估算用HyperLogLog - 消息队列场景新项目建议用Stream替代List

性能注意事项: 1. 小数据(<100元素)Hash比String更省内存 2. Sorted Set的ZRANGE时间复杂度O(log(N)+M) 3. 大量Key会消耗额外内存,考虑使用Hash整合

可通过TYPE key命令查看现有key的数据类型,MEMORY USAGE key分析内存占用情况。