目前redis一共有八种数据结构:五种基本数据结构+三种特殊数据结构

五种基本数据结构

  • 字符串
  • 字符串类型是string最基础的数据类型,首先键是字符串类型,而且其他几种结构都是在字符串类型的基础上构建的。
  • String类型是二进制安全的,意味着可以包含任何数据,比如字符串:简单的字符串、XML、JSOB;数字:整数、浮点数;二进制:图片、音频、视频
  • 使用场景:缓存、计数器、共享session、限速
  • 哈希
  • 哈希是键值对的集合。在 Redis 中,哈希是字符串字段和字符串值之间的映射。因此,它们适合表示对象。
  • 每个哈希可以存储多达 redis数据库类型 redis数据类型8种_redis数据库类型
  • 列表(list)
  • 列表类型是用来存储的多个有序的字符串,列表中的每个字符串成为元素,一个列表最大可以存储redis数据库类型 redis数据类型8种_redis数据库类型
  • 列表是一种比较灵活的数据结构,它可以充当栈和队列的角色
  • 使用场景:栈、队列、阻塞队列、 关注列表、粉丝列表、 最新列表、抢购等
  • 集合(set)
  • 集合(set)是 Redis 数据库中的无序字符串集合,但和列表不同的是集合中不允许有重复的元素,并且集合中的元素是无序的,不能通过索引下标获取元素
  • redis除了支持集合内的增删查找,同时还支持多个集合取交集、并集、差集。在 Redis 中,添加,删除和查找的时间复杂度是 O(1)。
  • 使用场景:
  • 使用set类型去跟踪一些具有唯一性的数据
  • 比如:访问某一博客的唯一IP地址的信息,我们只需要在每次访问者访问该博客的时候,将访问者的IP存入redis当中,然后set类型会自动保证IP地址的唯一性
  • 比如:set查询用户名是否被注册、效率极高
  • 比如:投票系统中,如果在限制用户一天只能投票一次,可以将今天日期作为 set 的key,存取用户额投票行为,从而保证投票唯一。
  • 用于维护数据之间的关联关系
  • 比如:一个用户对娱乐、体育感兴趣,另一个可能对新闻比较感兴趣,这些兴趣就是标签,有了这些数据就可以得到同一标签的人,以及用户的共同爱好的标签,这些数据对于用户体验以及增强用户粘度比较重要
  • 比如:所有购买某一个电子设备的ID被存储到一个指定的set当中,而购买另外一个电子产品的客户的ID被存储到另外的一个set当中,而如果此时我们想获取由哪些客户同事购买了这两种产品,那么就可以使用它的一个“交集”的操作来完成。
  • 有序集合(zset)
  • 有序集合和集合有着必然的联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素是可以排序的,但是它和列表的使用索引下标作为排序不同的是:它给每个元素设置一个分数,作为排序的依据
  • 使用场景:排行榜,比如视频网站需要对用户上传的文件做排行榜,榜单维护可能是多方面:按照时间、按照播放量、按照获得的赞数等。

三种特殊类型

  • geo:可以推算出地理位置信息,两地之间的距离
  • hyperloglog:基数排序,常用于统计网站的UV
  • bitmap位图:bitmap就是通过最小的单位bit来进行0或者1的设置,表示某个元素对应的值会在状态。一个bit的值,要么是0,要么是1,也就是说一个bit能存储的最多信息是2。bitmap常用于统计用户信息比如活跃粉丝和不活跃粉丝,登录和未登录,是否打卡等