首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Redis源码阅读(二)底层数据结构

512 ht:不满足ziplist条件其他情况 (5)有序集合类型(t_zset.c) Redis配置文件关于有序集合底层实现两个配置: # zset采用压缩列表时,元素个数最大值。...zset-max-ziplist-entries 128 # zset采用压缩列表时,每个元素字符串长度最大值。默认值为64。...初始化一个空字典 dictAdd 添加元素;先查找是否存在,存在则执行修改,否则添加键值对 dictFind 查找元素 dbOverwrite 修改元素;修改节点键值对值为新值,释放旧值内存...&d->ht[1] : &d->ht[0]; /*是否进行rehash操作,是则插入至散列表ht[1],否则插入散列表ht[0] */ /*申请新节点内存,插入散列表,给新节点存入信息*...步骤:①计算待删除元素长度;②数据复制;③重新分配空间。 4)遍历压缩列表 从头到尾(后向遍历)或者尾到头(前向遍历)访问压缩列表每个元素。

80620

Leetcode【939、1048】

因此可以先对单词列表,按照单词长度大到小排序。...2、单词最大长度为 16,因此可以对于每个单词 word(已经按长度大到小排好序了),遍历 word 所有长度减 1 子串(共有 len(word) 个)。...3、为了记录最长词链长度,可以定义一个字典 dic,为单词,值为以该单词为首最长词链长度。dic 相当于动态规划 dp 数组,接下来要找状态转移方程。...4、对于单词 word 每一个子串 sub,如果 sub 在单词列表能够找到(这里为了加快查找速度,要先将单词列表转化为集合 set,查找速度为 O(1)),则该子串 sub 最长词链长度取决于原来...sub 最长词链长度与在 word 最长词链长度基础上加 1 最大值,即 dic[sub] = max(dic[sub], dic[word] + 1)。

72920
您找到你想要的搜索结果了吗?
是的
没有找到

Python 3 学习笔记:序列

, reverse=False) 复制 key 用于指定每个元素中提取一个用于比较;reverse 默认为 False,表示升序排列,如果为 True 则降序排列。...元组与列表区别 列表属于可变序列,其元素可以被修改或删除;而元组不能,只能整体替换 元组比列表访问和处理速度快 元组可以作为字典,而列表不可以 字典 在 Python 字典也是可变序列,但是字典没有索引...字典具有一下特征; 通过 而不是索引来读取 字典是任意对象无需集合 字典是可变,并且可以任意嵌套 字典 必须是唯一 字典 必须不可变 创建字典 定义字典时,每个元素都包含两个部分...} 复制 元组每个元素 必须是唯一、不可变,可以是数字、字符串或者元组。...操作字典元素 添加元素 字典列表一样是可变序列,所以可以向其中添加元素,只需要指定元素和值即可, 1 dictionary[key] = value 复制 只要新加入 key 在字典已存在不存在即可

2.1K10

《闲扯Redis六》Redis五种数据类型之Hash型

2.hashtable 编码作为底层实现 hashtable 编码哈希对象使用字典作为底层实现, 哈希对象每个键值对都使用一个字典键值对来保存: 字典每个都是一个字符串对象, 对象中保存了键值对...调用 dictFind 函数, 在字典查找给定, 然后调用dictGetVal 函数, 返回该所对应值。...调用 dictFind 函数, 在字典查找给定, 如果找到的话说明键值对存在, 没找到的话就说明键值对不存在。...HDEL 调用 ziplistFind 函数, 在压缩列表查找指定所对应节点, 然后将相应节点、 以及节点旁边值节点都删除掉。...调用 dictDelete 函数, 将指定所对应键值对字典删除掉。

80310

python list tuple d

():以列表返回一个字典所有的      dict1.values():以列表返回字典所有值      dict1.items():以列表返回可遍历(, 值) 元组数组      dict.update...(dict2):把字典dict2/值对更新到dict里      dict.clear():删除字典内所有元素      dict.copy():返回一个字典浅复制      dict.setdefault...(key, default=None):和get()类似, 但如果不已经存在于字典,将会添加并将值设为default      list(dict)  将字典转为list      product...[0]:",tuple1[0]            tuple1[0]: wudashen          计算元组长度:len(tuple1):          返回元组最大值:max(tuple2...),min(tuple2)          比较两个元组元素:cmp(tuple1,tuple2)          计算元组长度:len(tuple1):           将列表转换成元组:lt

51730

Python字典操作

字典基本详情 字典查找速度快 字典是无序;(python3.6以上版本有序) 字典支持乘加、成员检查、长度、最小值、最大值、嵌套; 字典值不支持列表、元组、索引、切片、元素赋值跟切片赋值; 字典通过大括号表示...; 字典内容是项;项由和值组成,中间用冒号隔开;项和项之间用逗号隔开;需要注意必须是唯一字典意义是让用户能够快速找到特定单词(),以获悉其定义(值); 字典通过来进行查看值内容...字典值可以是字符串、数字、字典 字典赋值 dict1 = {'key1':'value1', 'key2':'value2'} 字典添加 dic1 = {'name': 'liangxiao',...dic1.popitem() # 随机删除任意一个键值对  通过列表转换字典 items = [('name', 'xiao'), ('age', 25)] Dict_ = dict...# 打印字典所有 dic1.get('name') # 查找指定keyvalue,没有则返回None dic1.items() # 一组一组查找所有内容

2.6K10

GitHub标星3w+项目,全面了解算法和数据结构知识

操作则是将元素队列移除。...时间复杂度: 索引: O(log(n)) 搜索: O(log(n)) 插入: O(log(n)) 删除: O(log(n)) 字典字典树,又称基数树或者前缀树,能够用于存储为字符串动态集合或者关联数组搜索树...哈希 哈希能够将任意长度数据映射到固定长度数据。哈希函数返回即是哈希值,如果两个不同得到相同哈希值,即将这种现象称为碰撞。...碰撞解决 链地址法(Separate Chaining): 链地址法每个桶是相互独立,包含了一系列索引列表。搜索操作时间复杂度即是搜索桶时间(固定时间)与遍历列表时间之和。...堆更准确地可以分为最大堆与最小堆,在最大堆,父节点键值永远大于或者等于子节点值,并且整个堆最大值存储于根节点;而最小堆,父节点键值永远小于或者等于其子节点键值,并且整个堆最小值存储于根节点

67950

Redis详解(五)------ redis五大数据类型实现原理

1、对象类型与编码   Redis使用前面说五大数据类型来表示和值,每次在Redis数据库创建一个键值对时,至少会创建两个对象,一个是对象,一个是值对象,而Redis每个对象都是由 redisObject...注意:在Redis总是一个字符串对象,而值可以是字符串、列表、集合等对象,所以我们通常说为字符串,表示是这个对应值为字符串对象,我们说一个为集合时,表示是这个对应值为集合对象...hashtable 编码哈希表对象底层使用字典数据结构,哈希对象每个键值对都使用一个字典键值对。   ...在前面介绍压缩列表时,我们介绍过压缩列表是Redis为了节省内存而开发,是由一系列特殊编码连续内存块组成顺序型数据结构,相对于字典数据结构,压缩列表用于元素个数少、元素长度场景。...hashtable 编码集合对象使用 字典作为底层实现,字典每个都是一个字符串对象,这里每个字符串对象就是一个集合元素,而字典值则全部设置为 null。

1.1K00

【Redis面试】基础题总结(

当同时满足以下条件时,哈希对象采用ziplist,否则采用hashtable编码; 哈希对象保存键值对数量小于512个 哈希对象保存所有键值对和值,其字符串长度都小于64字节 其中压缩列表编码采用压缩链表作为底层实现...content属性负责保存节点值(字节数组或整数),其类型和长度则由encoding属性决定,它们关系如下: 字典: 又称为散列表,是一种用来存储键值对数据结构 redis字典实现主要涉及三个结构体...取值,当按照分值范围访问有序集合列表时可以直接zsl取值,采用了空间换时间策略。...综上所述,zset对象底层数据结构包括:压缩列表字典,跳跃表 跳跃表: 跳跃表查找复杂度为平均O(logN),最坏O(N),效率堪比红黑树,却远比红黑树实现简单。...zskiplist有指向头尾节点指针,以及列表长度列表中最高层级。

16520

Python数据结构 原

序列每个元素都有索引,索引正序0开始,索引反序-1开始。 列表是最常用Python数据类型,列表数据元素不需要具有相同类型。列表是可变类型。...for in:遍历列表。 max():获取最大值。 min():获取最小值 cmp():比较两个列表元素。此方法只存在于2.x版本,3.x版本已经删除了此方法。...) # 列表找出指定元素第一次出现位置。...相当于javamap。 1、声明字典 字典每个键值 key value 对用冒号“:”分割,每个键值对之间用逗号“,”分割,整个字典包括在花括号“{}”。...dic1.keys() ['gender', 'age', 'name'] # 如果字典包含给定,则返回该值,否则返回为该设置值。

1.2K20

GitHub 标星 3w+,很全面的算法和数据结构知识

字典树,又称基数树或者前缀树,能够用于存储为字符串动态集合或者关联数组搜索树。...哈希 哈希能够将任意长度数据映射到固定长度数据。哈希函数返回即是哈希值,如果两个不同得到相同哈希值,即将这种现象称为碰撞。...Hash Map: Hash Map 是一种能够建立起与值之间关系数据结构,Hash Map 能够使用哈希函数将转化为桶或者槽下标,从而优化对于目标值搜索速度。...碰撞解决 链地址法(Separate Chaining): 链地址法每个桶是相互独立,包含了一系列索引列表。搜索操作时间复杂度即是搜索桶时间(固定时间)与遍历列表时间之和。...堆更准确地可以分为最大堆与最小堆,在最大堆,父节点键值永远大于或者等于子节点值,并且整个堆最大值存储于根节点;而最小堆,父节点键值永远小于或者等于其子节点键值,并且整个堆最小值存储于根节点

1.7K61

Python3基本数据类型

Python3基本数据类型 变量不需要提前声明 每个变量使用前必须赋值,赋值之后能会被建立 Python,变量是没有类型,这里所说“类型”是指内存中所存储对像类型。...字典 字典(dictionary)是Python另一个非常有用内置数据类型 列表是有序对象集合,字典是无序对象集合 字典当中元素是通过来存取 字典用{}来定义,是一组组键值对,key:value...# 返回一个字典浅复制 dic().fromkeys() # 创建一个新字典,以序列seq元素做字典,val为字典对应值...# 以列表返回一个字典所有的 dic.values() # 以列表返回字典中所有值 dic.setdefault(key...,default) # 和get()类似,如果不存在于字典,添加并设值为default dic.pop(key)

93530

Python基础

使用 list 函数可以把元组转换成列表 list(元组) 使用 tuple 函数可以把列表转换成元组 tuple(列表) 使用len函数可以计算元组、列表长度 len(列表) 字典 dictionary...(字典) 是 除列表以外 Python 之中 最灵活 数据类型 和列表区别 列表 是 有序 对象集合 字典 是 无序 对象集合 字典使用 键值对 存储数据,键值对之间使用 , 分隔 key...每个单词首字母大写)则返回 True string.islower() 如果 string 包含至少一个区分大小写字符,并且所有这些(区分大小写)字符都是小写,则返回 True string.isupper...、元组、字典 > >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组 注意 in 在对 字典 操作时,判断字典 in 和 not in...True not in 如果在指定序列没有找到值返回 True,否则返回 False 3 not in (1, 2, 3) 返回 False 注意:在对 字典 操作时,判断字典 完整

1.3K30

python入门——python数据类型

1、列表操作方法和函数 列表操作包含以下函数: 1、cmp(list1, list2):比较两个列表元素 2、len(list):列表元素个数 3、max(list):返回列表元素最大值 4、min...3、list.extend(seq):在列表末尾一次性追加另一个序列多个值(用新列表扩展原来列表) 4、list.index(obj):列表找出某个值第一个匹配项索引位置 5、list.insert...字典每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({}) ,格式如下所示: d = {key1 : value1, key2 : value2...-值得代码时,通常需要先定义一个空字典,如:dict = {} 要修改字典值,可依次指定字典名、用方括号括起来以及与该相关新值; 要删除-值对,可使用del语句对应-值对彻底删除。...key -- 在字典查找 dict.items() 以列表返回可遍历(, 值列表。 dict.keys() 以列表返回字典所有值。

1.7K10

18 张图带你彻底认识这些数据结构

preNode.next.next : null; } } 字典 字典主要特点是键值一一对应关系。可以比喻成我们现实学习查不同语言翻译字典。...在散列表上插入、删除和取用数据都非常快,但是对于查找操作来说却效率低下,比如查找一组数据最大值和最小值。查找这些操作得求助其它数据结构,比如下面要讲二叉树。...方案一:数组 按照顺序将所有员工信息依次存入一个长度为1000数组每个员工信息都保存在该数组某个位置上。 但是我们要查看某个员工信息怎么办呢?一个个查找吗?不太好找。...线性探测法 当发生碰撞(冲突)时,线性探测法检查散列表下一个位置【有可能非顺序查找位置,不一定是下一个位置】是否为空。...开链法是指实现哈希表底层数组每个数组元素又是一个新数据结构,比如另一个数组(这样结合起来就是二位数组了),链表等,这样就能存储多个了。

50210

python列表字典、元组、集合学习笔记

与字符串不同,列表是可变对象,支持原处修改操作 python列表是: 任意对象有序集合 通过偏移读取 可变长度、异构以及任意嵌套 属于可变序列分组 对象引用数组 列表操作 列表操作和字符串大部分都相同...:判断列表里有没有一个对象是对象3 list1.index(1):查找列表里第一个为1对象位置 list1.count(1):查找列表里对象为1个数 list1[x:y]:取第x到y对象,重新建立一个列表...: 使用heapq模块nlargest,nsmallest方法来取出列表几个最大值和最小值,当然也可以使用max和min函数来求最大和最小,使用sum函数来求列表数字和 >>> from heapq...字典值都有独立唯一,用相应来取值。...集合特点 集合元素和字典一样不重复 集合元素为不可变对象 集合创建 >>> s=set('a') >>> a=set({'k1':1,'k2':2}) >>> b=(['y','e','

2.2K30

python笔记:#013#高级变量类型

0 开始 索引 就是数据在 列表 位置编号,索引 又可以被称为 下标 注意:列表取值时,如果 超出索引范围,程序会报错 name_list = ["zhangsan", "lisi...列表.reverse() 逆序、反转 del 关键字(科普) 使用 del 关键字(delete) 同样可以删除列表中元素 del 关键字本质上是用来 将一个变量内存删除 如果使用 del 关键字将变量内存删除...列表 是 有序 对象集合 字典 是 无序 对象集合 字典用 {} 定义 字典使用 键值对 存储数据,键值对之间使用 , 分隔 key 是索引 值 value 是数据 和 值 之间使用 :...、元组、字典 > >= == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组 注意 in 在对 字典 操作时,判断字典 in 和 not in...True not in 如果在指定序列没有找到值返回 True,否则返回 False 3 not in (1, 2, 3) 返回 False 注意:在对 字典 操作时,判断字典 5.4

1.4K30

python笔记:#013#高级变量类型

字典 在 Python ,所有 非数字型变量 都支持以下特点: 都是一个 序列 sequence,也可以理解为 容器 取值 [] 遍历 for in 计算长度、最大/最小值、比较、删除 链接 +... 0 开始 索引 就是数据在 列表 位置编号,索引 又可以被称为 下标 注意:列表取值时,如果 超出索引范围,程序会报错 name_list = ["zhangsan", "lisi...列表 是 有序 对象集合 字典 是 无序 对象集合 字典用 {} 定义 字典使用 键值对 存储数据,键值对之间使用 , 分隔 key 是索引 值 value 是数据 和 值 之间使用...、元组、字典 = == < <= (1, 2, 3) < (2, 2, 3) True 元素比较 字符串、列表、元组 注意 in 在对 字典 操作时,判断字典 in 和 not in 被称为...not in 如果在指定序列没有找到值返回 True,否则返回 False 3 not in (1, 2, 3) 返回 False 注意:在对 字典 操作时,判断字典 5.4 完整

1.3K90
领券