栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

一、redis的常用五个数据类型

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一、redis的常用五个数据类型

String: 一般做一些复杂的计数功能的缓存

List: 做简单的消息队列的功能

Hash: 单点登录

Set: 做全局去重的功能

SortedSet: 做排行榜应用,取TopN操作;延时任务;做范围查找

1、String

String的数据结构为简单动态字符串(Simple Dynamic String,缩写SDS),是可以修改的字符串。内部结构实现类似Java的ArrayList,采用预分配冗余空间的方式来减少内存的频繁分配。

 

如图所示,内部为当前字符串实际分配的空间capacity,一般要高于实际字符串长度len。当字符串长度小于1M时,扩容都是加倍现有的空间;如果超过1M,扩容时一次只会多扩容1M的空间。需要注意的是字符串最大查高度为512M

2、列表(list)

redis列表是简单的字符串列表,按照插入顺序排序,可以添加一个元素到列的头或者尾。它的底层是一个双向链表,对两端的操作性能很高,但通过索引操作中间的节点性能较差。

 

数据结构

List的数据结构是快速链表quickList.

首先在列表元素较少的情况下会使用一块连续的内存存储,这个结构是zipList,也即压缩列表. 
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。当数据量较多时会改为quickList. 
因为普通链表需要的附加指针空间太大,会比较浪费空间,redis将链表和ziplist结合起来组 
成了quickList.也就是将多个ziplist使用双向指针串起来使用。这样既满足了快速的插入删除
功能,又不会出现太大的冗余。

如下图:

 

3、hash

redis hash是一个键值对集合

redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象,类似Java中的Map,可以通过命令expire设置失效时间。

数据结构

hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当filed-value 长度较短且个数较少时,使用ziplist,否则使用hashtable.

4、set

redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现数据重复时,set是一个很好的选择。并且set集合提供了判断某个成员是否在集合内的接口,这也是list不具有的

redis set是string类型的无序集合。它底层是一个value为null的hash表,所以增删改查的复杂度都是O(1)

5、zset

redis有序集合zset和普通集合set很相似,也是一个没有重复元素的字符串集合。

不同之处是有序集合的每个成员都关联了一个评分或者叫权重(score),这个评分被用来按照从最低分到最高分的方式排序集合中的成员。集合的成员是唯一的,但评分是可以重复的。

因为元素是有序的,所以可以很快根据评分或者次序来获取一个范围的元素。访问有序集合的中间元素也很快,因此有序集合可以作为一个没有重复数据的列表。

数据结构

SortedSet(zset)是redis提供的一个非常特别的数据结构,一方面它等价于java的 Map,可以给每一个元素value赋予一个权重score,另一方面又和Treeset 类似,内部的元素会按照权重进行排序,还可以通过score的范围来获取元素列表

zset底层使用了两个数据结构:

hash:hash的作用就是关联元素value和权重score,保障value的唯一性,可以通过value找
到对应的score
跳跃表:跳跃表的目的在于给value排序,根据score的范围获取元素列表

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/749776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号