Redis提供了5种主要的数据类型,下面重点详解Redis数据类型及应用场景@mikechen
1. String(字符串)
字符串是最基本的数据结构,可以存储任何类型的数据:整数、浮点数、JSON字符串、XML字符串等。
示例:
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中的哈希结构类似于字典或映射,其内部存储了一个键对值的映射表,支持存储多个字段和值,适用于存储用户信息、商品信息等复杂对象。
示例:
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
如下图所示:
3. List(列表)
列表结构是由一些列元素组成的简单数据结构,可以支持在两端插入和删除元素,适合做日志队列、消息队列等场景。
示例:
LPUSH mylist "Redis" LPUSH mylist "MongoDB" LRANGE mylist 0 -1
应用场景:
List 可以使用 LPUSH RPOP (或者反过来,RPUSH LPOP)命令实现消息队列。
4. Set(集合)
Set 类型是一个无序并唯一的键值集合,它的存储顺序不会按照插入的先后顺序进行存储。
示例:
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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注公众号,获知一线技术干货!
