Redis 是一个高性能的键值存储数据库,支持多种数据类型,远超简单的键值对。这些数据类型使其在缓存、消息队列、排行榜等场景中表现出色。以下是 Redis 的主要数据类型及其用法。


目录

  1. 字符串 (String)
  2. 哈希 (Hash)
  3. 列表 (List)
  4. 集合 (Set)
  5. 有序集合 (Sorted Set)
  6. HyperLogLog
  7. 地理空间 (Geo)
  8. 流 (Stream)
  9. 位图 (Bitmap)
  10. 其他类型
  11. 参考资料

1. 字符串 (String)

描述:最基本的数据类型,用于存储文本、数字或序列化数据(如 JSON)。最大长度为 512MB。

用途

  • 缓存(如网页内容)
  • 计数器
  • 存储配置或序列化对象

示例

SET key "Hello Redis"
GET key
# 输出: "Hello Redis"

INCR counter
# 输出: 1
SETEX session 3600 "user123"  # 设置 1 小时过期

命令SET, GET, INCR, DECR, SETEX, MSET, MGET


2. 哈希 (Hash)

描述:存储键值对的集合,适合表示对象(如用户信息)。每个哈希可存储 2³²-1 个字段。

用途

  • 存储结构化数据(如用户资料)
  • 配置管理

示例

HSET user:1 name "Alice" age 25
HGET user:1 name
# 输出: "Alice"
HGETALL user:1
# 输出: name "Alice" age "25"

命令HSET, HGET, HGETALL, HDEL, HINCRBY, HMSET


3. 列表 (List)

描述:有序的字符串列表,支持从两端操作,适合队列或栈。最大长度为 2³²-1。

用途

  • 消息队列
  • 最新数据列表(如时间线)
  • 任务队列

示例

LPUSH queue "task1"
RPUSH queue "task2"
LPOP queue
# 输出: "task1"
LRANGE queue 0 -1
# 输出: "task2"

命令LPUSH, RPUSH, LPOP, RPOP, LRANGE, LTRIM, BLPOP


4. 集合 (Set)

描述:无序、不重复的字符串集合,适合去重或关系运算。最大元素数为 2³²-1。

用途

  • 去重(如标签、好友列表)
  • 集合运算(如共同关注)

示例

SADD myset "apple" "banana"
SMEMBERS myset
# 输出: "apple" "banana"
SINTER set1 set2
# 输出: 交集元素

命令SADD, SMEMBERS, SREM, SINTER, SUNION, SDIFF, SCARD


5. 有序集合 (Sorted Set)

描述:带分数的集合,元素唯一,按分数排序。适合排行榜或优先级队列。

用途

  • 排行榜(如游戏积分)
  • 优先级任务
  • 时间排序

示例

ZADD leaderboard 100 "Alice" 200 "Bob"
ZRANGE leaderboard 0 -1 WITHSCORES
# 输出: "Alice" "100" "Bob" "200"
ZREVRANK leaderboard "Alice"
# 输出: 1

命令ZADD, ZRANGE, ZREM, ZSCORE, ZRANK, ZINCRBY


6. HyperLogLog

描述:基于概率的结构,用于估算集合的基数(唯一元素数),占用极小内存(约 12KB)。

用途

  • 统计独立访客(UV)
  • 大规模去重计数

示例

PFADD page:visits "user1" "user2"
PFCOUNT page:visits
# 输出: 2(近似值)
PFMERGE merged page1 page2

命令PFADD, PFCOUNT, PFMERGE


7. 地理空间 (Geo)

描述:存储经纬度坐标,支持距离计算和范围查询(Redis 3.2+)。

用途

  • 附近的人
  • 地理位置服务

示例

GEOADD cities 116.4 39.9 "Beijing"
GEODIST cities Beijing Shanghai km
# 输出: 距离(公里)
GEORADIUS cities 116.4 39.9 100 km

命令GEOADD, GEOPOS, GEODIST, GEORADIUS, GEOSEARCH


8. 流 (Stream)

描述:日志式数据结构,支持追加和消费消息(Redis 5.0+)。适合事件流或消息队列。

用途

  • 日志记录
  • 事件驱动系统
  • 消费者组

示例

XADD mystream * sensor-id 123 temp 23.5
XREAD COUNT 2 STREAMS mystream 0
XGROUP CREATE mystream mygroup $

命令XADD, XREAD, XGROUP, XACK, XRANGE


9. 位图 (Bitmap)

描述:基于字符串的位操作,适合存储二进制状态。最大长度为 512MB。

用途

  • 用户在线状态
  • 布隆过滤器
  • 签到统计

示例

SETBIT user:1:online 100 1
GETBIT user:1:online 100
# 输出: 1
BITCOUNT user:1:online

命令SETBIT, GETBIT, BITCOUNT, BITOP


10. 其他类型

  • Bitfield:对位图进行复杂操作,如增量计数。
  BITFIELD mykey INCRBY u8 100 1
  • 布隆过滤器(需模块):用于高效去重(非核心类型,需安装 RedisBloom)。

11. 参考资料