Redis数据类型及应用场景(图文详解)

Redis数据类型及应用场景(图文详解)-mikechen

Redis提供了5种主要的数据类型,下面重点详解Redis数据类型及应用场景@mikechen

1. String(字符串)

字符串是最基本的数据结构,可以存储任何类型的数据:整数、浮点数、JSON字符串、XML字符串等。

Redis数据类型及应用场景(图文详解)-mikechen

示例:

SET mykey "Hello Redis"
GET mykey

 

应用场景:

1)缓存数据

将频繁访问的数据存储在Redis字符串中,加快读取速度。

 

2)计数器

使用原子操作实现计数器功能,如网站访问计数器或消息队列计数器。

比如计算文章的阅读量:

# 初始化文章的阅读量
> SET aritcle:readcount:1001 0
OK
#阅读量 1
> INCR aritcle:readcount:1001
(integer) 1
#阅读量 1
> INCR aritcle:readcount:1001
(integer) 2
#阅读量 1
> INCR aritcle:readcount:1001
(integer) 3
# 获取对应文章的阅读量
> GET aritcle:readcount:1001
"3"

3)分布式锁

SET 命令有个 NX 参数可以实现「key不存在才插入」,可以用它来实现分布式锁:

SET lock_key unique_value NX PX 10000

 

 

2. Hash(哈希)

Redis中的哈希结构类似于字典或映射,其内部存储了一个键对值的映射表,支持存储多个字段和值,适用于存储用户信息、商品信息等复杂对象。

Redis数据类型及应用场景(图文详解)-mikechen

示例:

HSET user:1 name "John"
HSET user:1 age 30
HGET user:1 name

 

应用场景:

1)缓存对象

Hash 类型的 (key,field, value) 的结构与对象的(对象id, 属性, 值)的结构相似,也可以用来存储对象。

2)配置信息

适用于存储和检索具有多个字段的对象,如用户信息、配置数据等。

3)购物车

涉及的命令如下:

添加商品:HSET cart:{用户id} {商品id} 1

如下图所示:

Redis数据类型及应用场景(图文详解)-mikechen

 

3. List(列表)

列表结构是由一些列元素组成的简单数据结构,可以支持在两端插入和删除元素,适合做日志队列、消息队列等场景。

示例:

LPUSH mylist "Redis"
LPUSH mylist "MongoDB"
LRANGE mylist 0 -1

 

应用场景:

List 可以使用 LPUSH RPOP (或者反过来,RPUSH LPOP)命令实现消息队列。

Redis数据类型及应用场景(图文详解)-mikechen

 

 

4. Set(集合)

Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。

Redis数据类型及应用场景(图文详解)-mikechen

示例:

SADD myset "Apple"
SADD myset "Banana"
SMEMBERS myset

 

应用场景:

  • 标签(Tags):集合可以用于存储和操作标签数据,例如用户的兴趣标签、文章的标签等。
  • 好友关系:可以使用集合来表示用户之间的好友关系,进行交集、并集等操作。

Set 类型和 List 类型的区别如下:

  • List 可以存储重复元素,Set 只能存储非重复元素;
  • List 是按照元素的先后顺序存储元素的,而 Set 则是无序方式存储元素的。

 

5. Sorted Set(有序集合)

有序集合和集合相似,但是每个元素都关联一个分数,可以设定分数作为排序依据,适合做排名系统、热门文章等场景。

示例:

ZADD myzset 1 "Apple"
ZADD myzset 2 "Banana"
ZRANGE myzset 0 -1 WITHSCORES

 

应用场景:

  • 排行榜:有序集合可以按照分数对元素进行排序,适用于实现排行榜功能。
  • 带权重的数据:有序集合的分数可以用作数据的权重,例如按照热度排序的文章列表。

 

mikechen

mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注公众号,获知一线技术干货!

评论交流
    说说你的看法