Redis数据类型

Redis中有五种基础数据类型:

  • 字符串:String
  • 集合:Set
  • 有序集合:ZSet(Sorted Set)
  • 哈希:Hash
  • 列表:List

此外还有三种特殊类型:

  • 基数统计:HyperLogLog
  • 位图:Bitmap
  • 地理位置:Geospatial

Redis不只是简单的 key–value 缓存,而是允许一个key对应多种复杂结构。


一、String(字符串)

最基础的数据类型。

特点

  • key 对应一个字符串值
  • 可以存字符串、数字、二进制数据
  • 最大 512MB

常见命令

1
2
3
4
SET key value
GET key
INCR key
DECR key

典型应用

  • 缓存对象
  • 计数器(访问次数、点赞数)
  • 分布式锁(SETNX)

例子

1
2
SET page_view 100
INCR page_view

访问量计数器就诞生了。


二、Hash(哈希)

本质是 key → field → value 的结构,类似 Java 的 Map<String, Map<String, String>>

常见命令

1
2
3
HSET user:1 name ZhangSan
HSET user:1 age 20
HGET user:1 name

典型应用

存储对象信息:

1
2
3
4
user:1
name -> ZhangSan
age -> 20
city -> Beijing

优点是:

  • 可以只修改一个字段
  • 比直接存 JSON 更节省内存

三、List(列表)

一个 有序、可重复的字符串列表,底层是 双向链表 + 压缩列表(新版是 quicklist)。

常见命令

1
2
3
4
LPUSH list v1
RPUSH list v2
LPOP list
RPOP list

典型应用

1️⃣ 消息队列

生产者:

1
LPUSH queue msg1

消费者:

1
RPOP queue

2️⃣ 最新列表

例如微博时间线。


四、Set(集合)

无序、不重复的字符串集合

常见命令

1
2
3
SADD set a
SADD set b
SMEMBERS set

核心特性

支持数学集合运算:

1
2
3
SINTER  交集
SUNION 并集
SDIFF 差集

典型应用

  • 好友关系
  • 共同关注
  • 标签系统

例子:

1
2
user:1:follow -> {A,B,C}
user:2:follow -> {B,C,D}

求共同关注:

1
SINTER

五、ZSet(Sorted Set,有序集合)

这是 Redis 最强的数据结构之一。

结构:

1
value + score

Redis 会按 score 排序

常见命令

1
2
3
ZADD rank 100 user1
ZADD rank 80 user2
ZRANGE rank 0 10

典型应用

排行榜系统:

1
2
3
user1 100
user2 80
user3 60

可以快速得到:

  • 排名
  • Top N
  • 分数区间

六、BitMap

位图,本质是 位操作的字符串

应用:

  • 用户签到
  • 在线状态统计

七、HyperLogLog

用于 基数统计(去重计数)

例如:

  • 统计网站 UV

优点:

  • 只占 12KB
  • 允许少量误差

八、Geo

用于 地理位置计算

1
2
3
GEOADD
GEODIST
GEORADIUS

应用:

  • 附近的人
  • 附近商店

面试推荐总结回答(非常标准)

可以这样说:

Redis 常见的数据类型主要有五种:
String、Hash、List、Set、Sorted Set

String 用于缓存和计数器;
Hash 用于存储对象;
List 用于消息队列或时间线;
Set 用于去重和关系运算;
Sorted Set 用于排行榜等需要排序的场景。

此外 Redis 还提供了一些扩展结构,比如 Bitmap、HyperLogLog 和 Geo,分别用于位统计、海量去重统计和地理位置计算。