首页
学习
活动
专区
圈层
工具
发布

图解Redis中的Radix树

在Redis里,有好几个地方都用到了Radix树。比如阿里的Redis的每个slot槽里存储的key就是使用了Radix树。...为此Redis的大佬们决定使用Radix树来解决问题。Radix树是从哪里来的呢?是从Trie树来的。我们先来简单的了解一下Trie长啥样。 Trie树 Trie Tree,字典树。...我们叫这样的Trie树为压缩Trie树(Compressed Trie Tree)。 压缩Trie树也就是今天的主角Radix树,只不过他有多个名字,有人叫压缩Trie树,有人叫Radix树。...所以为了真正的了解Radix树,我们需要知道机器是怎么读取Radix树的。计算机对于Radix树的处理是以bit(或二进制数字)来读取的。一次被对比r个bit,2的r次方是radix树的基数。...总结 1、Redis用到了Radix树来存储key,Redis Stream中的key也用到了Radix树。 2、Radix树是压缩版的Trie树。

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

    eslint 规则之 《Missing radix parameter》

    eslint 规则连接:https://eslint.org/docs/rules/radix 原文规则错误描述解读 在我们使用parseInt 的时候,应该设置第二个参数据,而不能不写使用默认。...思考 parseInt 第二个参数radix 是什么意思 语法: parseInt(string, radix) 参数描述: 参数 描述 string 必需。要被解析的字符串。 radix 可选。...parseInt 第二个参数radix 默认值是什么 那么parseInt默认值,是不是10呢?默认值是10,传入0 会以10处理。...查看v8 parseInt 源码可以看出: if (radix == 0) { //如果传入radix是0,则以10进行处理 // Radix detection....radix > 36) return JunkStringValue(); //radix不在2~36之间的处理 总结 parseInt用的时候比较简单,但是理解第二个参数还是有些抽象。

    1.2K20

    图解基数树,给查找加点树

    Linux 的基数树实现在 lib/radix-tree.c 中,和上文提到的不同,Linux 并不是对一个字符串进行存储,而是一个无符号长整型名为 index 的值,可以从树操作的 Api 中看出:...*radix_tree_delete(struct radix_tree_root *tree, unsigned long key); Linux 的实现复杂但又精巧,全部展开的话估计又要新开一篇文章...,简单来说,Linux 的 radix tree 是围绕下面三个参数展开的: • RADIX_TREE_MAP_SHIFT 定义基数,内核通过CONFIG选项,可设置为 4 或 6,默认为 6; • RADIX_TREE_MAP_SIZE...= RADIX_TREE_MAP_SIZE - 1 ) 要理解这三个参数的作用,首先要再次明确 Linux 基数树的存储值是无符号长整型,名为 index(而不是字符串)。...而 RADIX_TREE_MAP_SHIFT 就是 bit 位的步长,Linux 默认值为 6,其含义是每右移 6 个 bit 为一个单位,因此对于上面的数字,可以建树为: RADIX_TREE_MAP_SIZE

    1.3K20

    linux 设备树

    linux 设备树 ---- 参考地址 http://blog.csdn.net/green1900/article/details/45646095 http://www.cnblogs.com...需要注意的是,设备树对于可热插拔的热备不进行具体描述,它只描述用于控制该热插拔设备的控制器 2.1设备树的组成 设备树包含了DTC(device tree compiler) , DTS(device...设备树语法 设备树是一颗树,书上的每个节点由节点和属性组成,属性是键值对 下面这个是rk3399-fpga.dts #include "rk3399.dtsi" //包含了公共部分 / {...unit_address一般是设备地址,用来唯一标识一个节点 Linux中的设备树还包括几个特殊的节点,比如chosen,chosen节点不描述一个真实设备,而是用于firmware传递一些数据给OS...这样就可以实现类似函数调用的效果 3.KEY 在设备树中,键值对是描述属性的方式,比如,Linux驱动中可以通过设备节点中的”compatible”这个属性查找设备节点 inux设备树语法中定义了一些具有规范意义的属性

    4.8K20

    【Linux驱动开发】Linux设备树详解

    、Linux 内核解析 DTB 文件流程五、绑定信息文档六、设备树常用 OF 操作函数(1)查找节点的 OF 函数(2)查找父/子节点的 OF 函数(3)提取属性值的 OF 函数(4)其他常用的 OF...)设备树相关文件均在 arch/arm/boot/dts/ 文件夹,如图: 3、编译工具DTC将.dts 编译为.dtbDTC 工具源码在 Linux 内核的 scripts/dtc 目录下。...如果要编译 DTS 文件的话只需要进入到 Linux 源码根目录下,然后执行如下命令:make all编译 Linux 源码中的所有东西,包括 zImage,.ko 驱动模块以及设备树make dtbs...三、设备树在系统中的体现Linux 内核启动的时候会解析设备树中各个节点的信息,并且在根文件系统的 /proc/device-tree 目录下根据节点名字创建不同文件夹/proc/device-tree...路径在Linux 源码目录: /Documentation/devicetree/bindings六、设备树常用 OF 操作函数Linux 内核给我们提供了一系列函数来获取设备树中的节点或者属性信息,这一系列函数都有统一的前缀

    3.2K11

    Linux设备树是什么?

    众所周知操作系统一直在不断的更新和发展,而在Linux驱动的架构上面也是不断的进步和完善。在早期的Linux内核和ARM架构中并没有采用设备树。...而这个.dtb文件就是UBOOT通过bootz或者bootm命令向Linux内核中传递的二进制设备树文件(.dtb))。...未使用设备树的设备匹配方法 在没有使用设备树之前,uboot会向Linux内核传递一个叫machine id的值,machine id也就是设备ID,告诉Linux内核自己是一个什么设备...使用设备树的设备匹配方法 当Linux内核引入设备树以后就不在使用MACHINE_START了,而是换为了DT_MACHINE_START。...说明引入了设备树以后就不会根据machine id来检查Linux 内核是否支持这个设备。

    8.2K20

    Linux设备树语法详解

    概念 Linux内核从3.x开始引入设备树的概念,用于实现驱动代码与设备信息相分离。在设备树出现以前,所有关于设备的具体信息都要写在驱动里,一旦外围设备变化,驱动代码就要重写。...基于同样的软件分层设计的思想,由于一个SoC可能对应多个machine,如果每个machine的设备树都写成一个完全独立的.dts文件,那么势必相当一些.dts文件有重复的部分,为了解决这个问题,Linux...我这里用`Linux4.8.5源码自带的dm9000网卡为例来分析设备树的使用和移植。...Linux设备树语法中定义了一些具有规范意义的属性,包括:compatible, address, interrupt等,这些信息能够在内核初始化找到节点的时候,自动解析生成相应的设备信息。...ARM设备树专题 设备树(上) Linux ARM设备树专题 设备树(下)

    6.9K71

    Linux设备树(DTS)介绍

    设备树由来 linux内核源码中,之前充斥着大量的平台相关(platform Device)配置,而这些代码大多是杂乱且重复的,这使得ARM体系结构的代码维护者和内核维护者在发布一个新的版本的时候有大量的工作要做...,以至于LinusTorvalds 在2011年3月17日的ARM Linux邮件列表中宣称“Gaah.Guys,this whole ARM thing is a f*cking pain in the...设备树的作用 设备树是一个描述硬件的数据结构,甚至你可以将其看成一个大结构体(这个结构体就是平台,成员就是具体的设备),需要注意的是设备树并不能解决所有的硬件配置问题(例如:机器识别),它只是提供一种语言...,将硬件的配置从linux内核的源码中提取出来。...Linux使用设备树的主要原因如下 A:平台识别 B:实时配置 C:设备植入 设备树解耦目标 目标一 vendor相关修改,完全独立出来,禁止在soc原生的dtsi中修改,只允许以dtbo的方式存在;

    2.3K20

    一文看懂 | 什么是页缓存(Page Cache)

    本文使用的 Linux 内核版本为:Linux-2.6.23 什么是页缓存 为了提升对文件的读写效率,Linux 内核会以页大小(4KB)为单位,将文件划分为多数据块。...页缓存的实现 前面主要介绍了页缓存的作用和原理,接下来我们将会分析 Linux 内核是怎么实现页缓存机制的。...从 address_space 对象的定义可以看出,文件的 页缓存 使用了 radix树 来存储。...radix树:又名基数树,它使用键值(key-value)对的形式来保存数据,并且可以通过键快速查找到其对应的值。...如果对 radix树 不太了解,可以简单将其看成可以通过文件偏移量快速找到其所在 页缓存 的结构,有机会我会另外写一篇关于 radix树 的文章。 2.

    26.2K104

    Linux笔记(23)| “插件”设备树

    今天和大家分享的依然是设备树,上一节里主要是介绍了设备树文件的基本格式、语法规则等,今天介绍一下如何使用设备树,以及如何动态加载设备树。...设备树里记录的是“资源”,比如我们要点亮led,就可以增加一个led的节点,把led相关的寄存器放在这个节点里。...这样我们的设备树文件就写好了,参照上一节的做法,我们修改完设备树文件,然后进行编译,将生成的dtb文件替换开发板原来的dtb文件,然后重启开发板即可。...设备树文件写好了,接下来就是写驱动文件了。...其实驱动文件和我们之前在Linux笔记(21)| platform总线驱动分析介绍的基本是一样的,唯一的不同就是资源获取方式不一样,之前是在设备文件中获取,现在是在设备树文件上获取。

    2.9K10
    领券