文章目录
数据类型区分
1. String(字符串)
String是redis最基本的类型,一个key对应一个value,string类型是二进制安全的,可以包含任何数据,一个键最大能存储512MB
-
value值
string:普通字符串
int:整数类型,可以做自增、自减操作
float:浮点类型,可以做自增、自减操作
-
业务场景
-
缓存:通过将数据存储在Redis中的字符串中,可以快速地读取和写入数据,从而提高应用程序的性能。常见的缓存场景包括数据库查询结果、API响应等
-
计数器:使用Redis中的字符串来实现计数器功能。可以通过递增(INCR)或递减(DECR)指定键的值来实现计数器的增加或减少
-
分布式锁:利用Redis中的setnx来实现分布式锁。通过将一个唯一标识作为键,将值设置为某个特定的标识符,从而实现对资源的互斥访问
-
会话管理:在Web应用程序中,可以使用Redis中的字符串来存储用户会话信息,例如用户的登录状态、用户的购物车内容等
-
消息队列:通过将消息以字符串的形式存储在Redis中,可以实现简单的消息队列功能。生产者将消息写入Redis的列表(List)中,消费者则从列表中读取并处理消息
-
-
实例
redis 127.0.0.1:6379> SET name "redis.net.cn"
OK
redis 127.0.0.1:6379> GET name
-
结构解析

2. Hash(哈希)
Hash类型,也叫散列,其value是一个无序字典,hash是一个string类型的field和value的映射表
-
业务场景
-
缓存对象信息
-
购物车场景的使用
-
缓存配置信息
-
-
实例
redis 127.0.0.1:6379> HMSET user:1 username redis.net.cn password redis.net.cn points 200
OK
redis 127.0.0.1:6379> HGETALL user:1
-
"username" //key
-
"redis.net.cn" //value
-
"password" //key
-
"redis.net.cn" //value
-
"points" //key
-
"200" //value
-
-
结构解析

3. List(列表)
list是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,可以在链表的左右两边分别操作(反向查找和遍历等),所以也称为双向链表
-
存入形式

-
业务场景
-
秒杀活动抢购:list 是线程安全的,所有的pop操作是原子性的,适用于抽奖,抢票等场景,用来防止超卖问题
-
实时聊天室:Redis的List可以作为聊天室中消息的缓存区域。每当有用户发送一条新消息时,就将该消息添加到聊天室对于的List中,并通过订阅/发布机制将该信息广播给所有在线用户(确保消息的顺序没有发生错乱)
-
-
特点
-
有序集合:List中的元素是有序的,按照插入的顺序排列。你可以根据索引来访问列表中的元素。
-
允许重复元素:List中的元素可以重复。
-
支持从两端插入和删除元素:可以从列表的头部(左边)或尾部(右边)插入和删除元素。
-
-
实例
redis 127.0.0.1:6379> lpush redis.net.cn redis
(integer) 1
redis 127.0.0.1:6379> lpush redis.net.cn mongodb
(integer) 2
redis 127.0.0.1:6379> lpush redis.net.cn rabitmq
(integer) 3
redis 127.0.0.1:6379> lrange redis.net.cn 0 10
-
"rabitmq"
-
"mongodb"
-
"redis"
redis 127.0.0.1:6379>
-
-
结构解析

4. Set(集合)
Set集合是一种无序不重复的数据结构,查询效率高,具备去重功能,支持集合的交集、并集、差集运算,其应用场景丰富
-
使用场景
-
点赞、踩、收藏:Set 类型可以保证一个用户只能点一个赞;
-
共同关注、标签:Set 类型支持交集运算,所以可以用来计算共同关注的好友、公众号等;
-
抽奖活动:存储某活动中中奖的用户名 ,Set 类型因为有去重功能,可以保证同一个用户不会中奖两次
-
-
特点
-
无序
-
元素不可重复
-
查找快
-
支持交集、并集、差集等功能
-
-
实例
redis 127.0.0.1:6379> sadd redis.net.cn redis
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn mongodb
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn rabitmq
(integer) 1
redis 127.0.0.1:6379> sadd redis.net.cn rabitmq
(integer) 0
redis 127.0.0.1:6379> smembers redis.net.cn
-
"rabitmq"
-
"mongodb"
-
"redis"
-
-
结构解析

5. Zset(有序集合)--SortedSet
ZSet集合是一种有序不重复的数据结构,对比Set集合多了一个排序属性(分数:score),集合的元素按分数递增的顺序排序,分数相同则按字典顺序排序,这里的不重复指的是成员不重复,分数可以重复
-
特点
-
可排序
-
元素不重复
-
查询速度快
-
-
业务场景
-
排行榜:score作为浏览次数,自动进行排序,但要注意冷数据
-
滑动窗口限流:score作为时间戳,可统计最近一段时间内内的成员数量,实现滑动窗口限流
-
-
实例
redis 127.0.0.1:6379> zadd redis.net.cn 0 redis
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 mongodb
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq
(integer) 1
redis 127.0.0.1:6379> zadd redis.net.cn 0 rabitmq
(integer) 0
redis 127.0.0.1:6379> ZRANGEBYSCORE redis.net.cn 0 1000
-
"redis"
-
"mongodb"
-
"rabitmq"
-
-
结构解析

6. 队列、集合、有序集合区别示意图
集合VS有序集合
-
集合为
无序,有序集合以score为基准进行排序 -
集合为普通的键值对v:k,有序集合为s+v:k,多了一个值用于排序

列表VS有序集合
-
列表元素
可以重复,有序集合元素不能重复 -
列表为普通的键值对v:k,有序集合为s+v:k,多了一个值用于排序
