本文涵盖Redis各个数据结构最适合的场景(朋友圈,用户关注模型,微博热榜,购物车,电商搜索…)
我们先来介绍一下redis的value数据类型在各场景下的使用
String类型
string 是Redis的最基本的数据类型,可以理解为与 Memcached 一模一样的类型,一个key 对应一个 value。string 类型是二进制安全的,意思是 Redis 的 string 可以包含任何数据,比如图片或者序列化的对象,一个 redis 中字符串 value 最多可以是 512M。
String类型的基本命令
String类型的应用场景
Hash结构
hash 是一个键值对集合,是一个 string 类型的 key和 value 的映射表,key 还是key,但是value是一个键值对(key-value)。类比于 Java里面的 Map<String,Map<String,Object>> 集合。
Hash结构的基本命令
Hash结构的使用场景图片
如果我要存储一个文章的点赞数,是使用string类型好还是hash类型好呢?一定是使用hash类型,因为hash类型可以对某条记录的某个字段进行修改,若是使用string,我们需要将记录从json转为obj,再操作点赞数字段后转为json存入redis.
使用Hash来实现简易购物车
List结构
list 列表,它是简单的字符串列表,按照插入顺序排序,你可以添加一个元素到列表的头部(左边)或者尾部(右边),它的底层实际上是个链表。
列表有两个特点:一、有序 二、可以重复
List结构的基础命令
List结构的使用场景
信息流使用数据库order by也可以实现,但是使用list可以很高效。
但是用户粉丝量多的话redis扛不住。↓↓↓↓↓List实现用户关注信息流列表↓↓↓↓↓
Set数据结构
Redis 的 set 是 string 类型的无序集合。
相对于列表,集合也有两个特点:一、无序二、不可重复
Set常用的基础命令
Set集合的一些运算操作(下面用户关注模型用到)
SINTER:求交集
SUNION:求并集
SDIFF:求差集:set1-(SUNION(set2,set3)):set1减去set2与set3的并集
Set应用场景
Set数据结构实现“社交用户关注模型” ↓↓↓↓↓↓↓↓↓↓
可以看到上面的微博微关系,这些微关系有什么用呢?比如我和A有很多共同关注,在社交平台的数据库中认为我和A是好朋友,有一天A买了一台MAC,平台会认为我可能也会喜欢,于是第二天社交平台上推荐的广告就是那台MAC。
Set数据结构在电商搜索中的应用
ZSet数据结构
zset (sorted set ) redis
有序集合zset和集合set一样也是string类型元素的集合,且不允许重复的成员。不同的是 zset
的每个元素都会关联一个分数(分数可以重复),redis 通过分数来为集合中 的成员进行从小到大的排序。
ZSet的常用命令
ZSet实现排行榜
若朋友圈点赞需要排序,则可以使用ZSet存储,score为时间戳,number点赞为用户ID。
完结撒花
在开发场景下,若要使用缓存,会第一时间想到使用redis.我想还是因为redis的性能之高,速度之快。
问:redis是如何做到性能这么高呢?
答:1.redis基于内存实现的特点。2.NIO
3.redis优秀的数据结构。redis的key一般来说都是string类型,可是value有很多不同的逻辑类型,例如set,list,hash等,在这些逻辑类型后还有真正实现存储的结构,例如双向链表,跳表等。
关注公众号:方案山谷