- String 类型
String类型是Redis用的较多的一个基本类型,也是最简单的一种类型,
String类型的应用场景
1,分布式缓存
Redis中会缓存一些常用的热点数据,可以提升数据查询的性能。
2,限流
使用计数器实现手机验证码频率限流。
3,阅读量和点赞量
incr key每次阅读加1,
get key 获取阅读量
decr key 每次取消点赞减1
- List列表类型
列表类型(list)可以存储一个有序且可重复的字符串列表,是一个链表的结构,对于插入,删除元素速度比较快查询元素比较慢
实际使用场景
1, 消息队列
列表类型可以使用 rpush 实现先进先出的功能,同时又可以使用 lpop 轻松的弹出(查询并删除)第一个元素,所以列表类型可以用来实现消息队列,
在发红包的场景中,假设发一个10元,10个红包,需要保证抢红包的人不会多抢到,也不会少抢到,这种情况下,
- Hash类型
Hash类型大家应该都不陌生,他就是一个键值对集合,Hash相当于一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value),类比于 Java里面的 Map> 集合。
Hash实际应用场景
购物车功能
•1.以用户ID作为key
•2.以商品id作为field
•3.以商品的数量作为value
- Set类型
集合类型 (Set) 是一个无序,不可重复键值集合。它的存储顺序不会按照插入的先后顺序进行存储。
set类型的实际应用场景
1.给用户添加标签。
sadd user:1:basketball game coding swing sadd user:2:sing coding sleep basketball
使用sinter命令,可以来计算用户共同感兴趣的标签
sinter user:1 user:2
2,抽奖场景
SMEMBERS key 查询参与抽奖的列表
SRANDMEMBER key 2 从该集合中随机抽取2个元素,抽取的元素不会从集合中删除,
SPOP key 2 从集合中随机抽取2个元素,会从集合中删除抽取元素(可以实现抽泣一等奖和二等奖)
3,集合运算
SINTER key1,key2,key3 取多个集合中的交集,实现共同关注的人
SUNION key1,key2,key3 取多个集合中的并集
- Zset类型
在集合类型的基础上,有序集合类型为集合中的每个元素都关联了一个分数(浮点型),这使得我们不仅可以完成插入、删除和判断元素是否存在等集合类型支持的操作,还能获得分数最高(或最低)的元素、获得指定分数范围内的元素等与分数有关的操作。元素是有序的,按照分数从小到大排序
ZSet的使用场景
•排行榜系统有序集合比较典型的使用场景就是排行榜系统。例如学生成绩的排名。
添加用户赞数例如小编Tom发表了一篇博文,并且获得了10个赞。
zadd user:ranking article1 10
用户赞数这个时候有一个读者又觉得Tom写的不好,又取消了赞,此时需要将文章的赞数从榜单中减去1,可以使用 zincrby。
zincrby user:ranking -1 article1
查看某篇文章的赞数
ZSCORE user:ranking arcticle1
热点话题排名比如想微博的热搜,就可以使用ZSet来实现。
zrevrange key 0 10 withscores 按照分数进行排行,取前10条
说出以上使用案例,说明你使用过redis,面试官会认为你真正的使用过redis