目前redis一共有八种数据结构:五种基本数据结构+三种特殊数据结构
五种基本数据结构
- 字符串:
- 字符串类型是string最基础的数据类型,首先键是字符串类型,而且其他几种结构都是在字符串类型的基础上构建的。
- String类型是二进制安全的,意味着可以包含任何数据,比如字符串:简单的字符串、XML、JSOB;数字:整数、浮点数;二进制:图片、音频、视频
- 使用场景:缓存、计数器、共享session、限速
- 哈希:
- 哈希是键值对的集合。在 Redis 中,哈希是字符串字段和字符串值之间的映射。因此,它们适合表示对象。
- 每个哈希可以存储多达
- 列表(list)
- 列表类型是用来存储的多个有序的字符串,列表中的每个字符串成为元素,一个列表最大可以存储
- 列表是一种比较灵活的数据结构,它可以充当栈和队列的角色
- 使用场景:栈、队列、阻塞队列、 关注列表、粉丝列表、 最新列表、抢购等
- 集合(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常用于统计用户信息比如活跃粉丝和不活跃粉丝,登录和未登录,是否打卡等