橡皮擦擦

Redis的5种数据类型及常见的使用场景

技术杂谈

String 字符串

1.应用场景

作为常规的key-value缓存应用,例如微博数、粉丝数、数据缓存、计数器、Session等

Hash 哈希

1.说明

在redis中哈希类型是指键本身又是一种键值对结构,如

value={{field1,value1},......{fieldN,valueN}}

Redis Hash对应Value内部实际就是一个HashMap,实际这里会有2种不同实现。

  1. 这个Hash的成员比较少时Redis为了节省内存会采用类似一维数组的方式来紧凑存储,而不会采用真正的HashMap结构,对应的value redisObject的encoding为zipmap。
  2. 当成员数量增大时会自动转成真正的HashMap,此时encoding为ht。

2.应用场景

用户信息、商品信息

List 列表

lpush+lpop=Stack(栈)
lpush+rpop=Queue(队列)
lpush+ltrim=Capped Collection(有限集合)
lpush+brpop=Message Queue(消息队列)

2.应用场景

消息队列、资讯列表

Set 集合

1.说明

Redis还为集合提供了求【交集】、【并集】、【差集】等操作,可以非常方便的实现如共同关注、共同喜好、二度好友等功能,对上面的所有集合操作,你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。

2.应用场景

在微博中,可以将一个用户所有的关注人存在一个集合中,将其所有粉丝存在一个集合。
标签(tag):集合类型比较典型的使用场景,如一个用户对娱乐、体育比较感兴趣,另一个可能对新闻感兴趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及曾强用户粘度比较重要。
sadd=tagging(标签)
spop/srandmember=random item(生成随机数,比如抽奖)
sadd+sinter=social Graph(社交需求)

Zset 有序集合

1.说明

Redis sorted set的内部使用HashMap和跳跃表(SkipList)来保证数据的存储和有序,HashMap里放的是成员到score的映射,跳跃表按score从小到大保存所有集合元素。
使用跳跃表的结构可以获得比较高的查找效率,并且在实现上比较简单。时间复杂度与红黑树相同,增加、删除的操作较为简单。

2.应用场景

排行榜、附近的人

点我评论
打赏本文
二维码


45

文章

6

分类