IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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.BitMaps

Bitmaps实际上也是一种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的命名真的好随便,再是体会到了数据结构的强大之处。

今天先来记录一下每个类型的概念和大概用法,以后有能力了再去研究底层实现把

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:44:08  更:2021-12-24 18:46:59 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码