| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> redis数据类型 -> 正文阅读 |
|
[数据结构与算法]redis数据类型 |
1.五大基本数据类型1.String:最简单的类型,采用key-value的形式,一个String只能存储一组信息。value允许的最大存储容量为512MB。 String类型是二进制安全的。意味着Redis的string可以包含任何数据。比如jpg图片或者序列化的对象。 数据结构: String的实现结构类似于Java的ArrayList数组:会先分配一个默认存储容量。每次扩容时都是在当前存储容量的基础上翻倍。与ArrayList的扩容不同的是,当字符串小于1MB时,每次扩容会加倍。大于1MB时,每次扩容只会增加1MB,达到其最大容量512MB时,不会再进行扩容。 2.list类似于Java等语言的LinkedList?特点是单键多值,按照插入顺序排序(头插,尾插)。 其底层是是一个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。 数据结构: List的数据结构为每个节点都为zipList的quickList的双向链表,每个zipList是一段连续的存贮空间,可以把它看成一个数组,zipList实际上还包含了所占字节数,元素个数,偏移量等信息。深入了解请看Redis内部数据结构详解(4)——ziplist - 铁蕾的个人博客 (zhangtielei.com) 3.set与list类似的单键多值,不同点是无序存储与不可重复存储。它的底层是一个value值均为0的一个hash表所以添加,删除,查找的复杂度都是O(1)。 数据结构: Set数据结构是dict字典,字典是用哈希表实现的。 Java中HashSet的内部实现使用的是HashMap,只不过所有的value都指向同一个对象。Redis的set结构也是一样,它的内部也使用hash结构,所有的value都指向同一个内部值。 4.hash类似于java中的Map再嵌套一层Map(Map<String,Map<String,Object>>),redis中hash的key对应最外层map的key,filed对应内层Map的key,value对应内层Map的value。 数据结构: Hash类型对应的数据结构是两种:ziplist(压缩列表),hashtable(哈希表)。当field-value长度较短且个数较少时,使用ziplist,否则使用hashtable。 5.Zset有序的set,与普通set不同的是:Zset的每个key对应的多个元素都需要指定一个叫做score的权值。这样就可以获取一个范围内的set元素 SortedSet(zset)是Redis提供的一个非常特别的数据结构,一方面它等价于Java的数据结构Map<String, Double>,可以给每一个元素value赋予一个权重score,另一方面它又类似于TreeSet,内部的元素会按照权重score进行排序,可以得到每个元素的名次,还可以通过score的范围来获取元素的列表。 zset底层使用了两个数据结构 (1)hash,hash的作用就是关联元素value和权重score,保障元素value的唯一性,可以通过元素value找到相应的score值。 (2)跳跃表,跳跃表的目的在于给元素value排序,根据score的范围获取元素列表。 2.新的数据类型1.BitMapsBitmaps实际上也是一种key-value,与普通key-value不同的是,Bitmaps的value只能是0或1,Bitmaps的key代表偏移量是“数位”的位置。 例: 每个独立用户是否访问过网站存放在Bitmaps中, 将访问的用户记做1, 没有访问的用户记做0, 用偏移量作为用户的id。 设置键的第offset个位的值(从0算起) , 假设现在有20个用户,userid=1, 6, 11, 15, 19的用户对网站进行了访问, 那么当前Bitmaps初始化结果如图 2.hyperloglog与set类似,只能存放不重复的元素。不同的是:hyperloglog只用来记录存入的元素的数量,不记录存入元素的具体值。 3.Geospatial用来存放坐标的类型,提供了经纬度设置,查询,范围查询,距离查询,经纬度Hash等常见操 作。 3.碎碎念首先是感觉redis的命名真的好随便,再是体会到了数据结构的强大之处。 今天先来记录一下每个类型的概念和大概用法,以后有能力了再去研究底层实现把 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 17:26:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |