家人们谁懂啊,处理重复数据堪比西天取经。今天教你 set 集合,一秒去虫,爽到飞起。救命,我昨天刚为这事崩溃过,这就是没解锁 set 集合的痛苦。它去虫只要一行,速度快一百倍,还不用费脑子 爬了十万条用户数据,一半都是重复的。我用列表推导式写了五行代码,去虫跑了半分钟还卡崩了,想摔键盘。 其实 set 集合的哈希去重就像小区快递柜,每个数据都有唯一编号哈希值,快递柜只收编号唯一的包裹,重复编号直接拒收 哦。所以重复数据根本进不了 set 集合,自动被过滤了。没错,比你手动筛快一百倍!因为快递柜找编号是秒查,不是挨个翻。 咱拿十万条重复数据实测,列表推导式去重要三十秒 set 集合一行 list set delta 一 点三秒搞定。我天,差一百倍,那我昨天白熬了。 举个例子, data 等于一一二二三三三,用 set delta 直接变对一二三,再转成列表就行,简单到离谱。这也太香了吧!以后去重直接冲 set 集合, 记个小坑。 set 集合是无序的,去重后顺序可能变,要保序的话可以用 dick from kids 括号,但普通场景 set 完全够用。 家人们投票了,你平时用啥去中? a 列表推导式 b set 集合 c 其他扣对应字母,看看谁是效率王者。 set 集合等于去重神器,快减爽。 下期是不是要讲集合的其他骚操作?必须的,交集并集,找共同数据,比 excel 还快,下期见。
粉丝166获赞936

今天和大家分享一下什么是哈西查找。哈西查找我们通俗易懂的理解就可以理解为我们日常中找快递。 假如说你们小区有十个快递柜,好比哈西表,快递元素键时不用挨个柜找,而是按一个偷懒的规则来放快递收件人手机尾号等于快递柜编号,这规则就是哈西函数。比如说你的手机尾号是五,那么我们直接把快递放进五号柜, 当你取快递时,也按照同一规则报尾号,五直接去五号柜了,不用翻遍十个柜,这就是哈西查找的核心,用固定规则 直接定位,不用逐个找,一步到位。但如果遇到冲突,比如有人和你尾号一样也是五,快递员就会看五号柜满没满,满了就往旁边六号柜放六号,满了就放七号。总之,哈西查找就像按尾号来找快递柜,用规则直接定位,然后我们打开 id, 用代码来实现一下哈西查找。 首先快递柜数主就是相当于哈希表, 快递柜总数固定有十个,对应尾号零到九。然后我们进行初识化,快递柜刚投入使用时,所有柜子都是空的, 然后我们用空来标记没有快递的柜子, 哈希函数就等于手机尾号找柜子的规整,尾号直接对应柜子编号,比如说手机尾号为七,那么对应的就是七号柜, 取手机号最后一位转成数字就是尾号。 然后我们进行第三步,按尾号进行放快递柜,冲突了就往后找空的快递柜放。 这里的 phone 指的是收件人手机号, express 表示的是快递信息,比如说小明的零食。然后我们进行算对应柜址编号, 如果我们遇到了冲突,也就是说假如说目标柜已经有了快递,那么我们就往后逐个找空的快递柜, 然后我们进行放进空的快递柜, 然后我们来打印一下, 然后我们进行第四步取快递,按尾号找快递柜,冲突了,就按存的时候顺序查找, 然后我们来算对应的柜子编号,和存的时候的规则是一致的, 然后我们来记录开始找的位置,避免绕圈重复查找, 然后我们来开始找,如果柜子有快递但还没找到,我们就往后找, 找到对应的快递取出来,然后设柜子回空, 然后我们来打印一下,结果 如果我们找了一圈都没有找到,那么要么就是没有存,要么就是已经存,快递已经取走了, 然后我们来进行测试一下模拟存和取快递的过程。 首先新建一组十个快递柜,然后我们来导入一些快递信息,然后我们的代码就书写完成了, 然后我们在这里添加一个空差,并调用一下方法,最后我们来编辑一下,那么今天的分享就到此结束了。

大家好,这里是代码所养录,我是成员卡尔,那这期视频呢,我来给大家讲解代码所养录中哈西表章节里边的第三题啊,两数之和。那这道题目呢,是立扣上的第一题啊, 那很多刚开始刷立扣的同学呢,就是可能刷的第一道题目就是他啊,会认为,哎,立扣上第一题应该很简单吧啊,其实这道题目呢啊,并不简单啊,至少对于啊刚开始学算法的同学来说,这道题目啊,并不简单。 那我们来说一下这道题目的提议啊,啊,就是给大家一个数组啊,然后呢,给大家一个目标值,在这个数组中呢,我们要找到两个元素相加等于这个目标值,然后我们要返回这两 个元素的就所在数组的下标啊,这道题目呢,其实是哈西表里边啊,比较经典的题目啊,是用 map 来解决的。那这道题目的思考过程和解题的方法究竟是什么样的呢?啊,我来给大家啊,大体化一下。 呃,这里呢有一个数组啊,一个数组,那这个数组呢,我们可以二七 三六吧啊,二七三六,然后呢,我们的目标值是九啊,目标值是九啊, 我们要找到两个元素啊,相加等于九,并返回这两个元素的下标啊,如果没找到的话,我们就返回空啊,如果发现有多对的话啊,有多个两个元素符合,相 加等于九,我们就返回一个就可以了。那这道题目呢,我们为什么会想到用哈西法来解决这道题目啊?我们来回顾一下,在上两期视频的时候呢,其实我有讲到,什么时候我们会想到用哈西法啊,用哈西表来做一下映射啊,每当我们遇到 要判断这个元素是否出现过,或者是要判断这个元素是否在这个集合里出现过的时候, 我们啊第一反应就是,哎,我是不是可以用哈西法呀?我是不是应该用哪些哈西表的结构啊,来做一下处理啊?啊?这是我们一个正常的一个思考过程。 那么这道题目里边我们为什么会想到用哈西法啊?因为我们在便利一个元素的时候啊,我们要存放我们之前便利过的元素, 例如说我这里便利到三了,我是不是要,哎判断一下,呃,一个元素我们是否之前便利过啊?如果我们之前便利过的话啊,我们是不是就是找到了一对,然后这一对相加是等于九啊?是吧?例如说假如便利到元素三,那我们是不是 去找元素六,因为三加六等于九吗?我们是不是找元素六我们是否便利过,是吧?是不是要,哎要判断一下呢?就前面有没有出现过元素六的 啊,这个啊所对应的这个位置是吧?那所以说呢,其实我们这道题目呢,是需要判断啊,一个元素啊是否便利过,那,那如何判断他是否便利过呢?我们就把我们便利过的元素加到一个集合里,然后我们 每次啊便利一个新的位置之后,我们就判断,哎,我们想寻找的这个元素是否在这个结合里出现过,如果在这个结合里出现过,就是我们之前便利过,那么这个结合啊,我们要用什么呢啊?我们就要用一种啊哈西表的结构啊, 那这里呢,我现在是讲了这道题目,我们为什么会想到用哈西法,用哈西表啊?那接下来我们再来说,我们应该用什么样的哈西表来存这个结构啊? 因为我们想要找一个元素,是吧?那这个元素是否出现过,同时我们还要知道这个元素在数组里的下标,那此时我们是不是要啊相对要判断两个元素啊?一个 是啊,一个是数组里边的这个数值,是吧?一个是数组里边的这个下标,那么我们应该用什么?那么我们应该用什么来存放呢?啊?我们之前在上两期视频里边,第一期哈西表的视频我讲了用数组 啊来做哈西映射,是吧?第二期视频里边我讲了用 set 来做哈西映射,那这期里我们要存放两个元素,用数组,用 set 都不行了吧?那此时我们就应该用 map, map 的 key, 这是 map 的歪流 啊,此时我们就想到了用脉啊,那么有同学可能想了,为什么要拿这个数啊?这个数组里边的这个数值作为 k 呢?为什么不用下标来做 k 呢?啊? 那这个问题呢,就要思考我们要查找的是什么?我们是不是查找一个元素是否出现过?我们要找的是元素是否出现过,对吧?啊?那么我们就应该把这个元素作为我们的 k 啊,这才是脉魄的啊,作用脉搏他就是能在最快的时间段啊,脉搏他就是能在最快的时间内啊,去查找这个 k 是否在这个脉搏里出现过,那么我们要查找的是这个元素是否出现过,那么 那么这个元素就作为我们的 k, 那我们还要知道这个元素所对应的下标,那么这个下标就可以作为我们的 y 六啊。那此时呢,我就讲了这道题目啊,我们为什么要用哈西法是吧?那 以及这道题目我们用哈写法之后,我们用哪种数据结构,为什么要用 map 是吧?接下来呢,我们再来讲啊,整个这道题目的一个解题过程,以及 map 在这道题目里边的作用啊。 那么,呃,首先呢,我们要知道我们这个 map 在这道题目里边它呃具体的功能是什么? map 是用来存放我们便利过的元素啊,很多同学这道题目做过了,其实,呃没有想清楚 map 在这道题目里边究竟是做什么的啊? map 如何用来存放我们便利过的元素呢?我在这里大大体给大家画一个过程啊。 呃,这是 map 集合啊,那么我们当前便利的这个是原 数二是吧?那么我们是不是想要找一下元素七是否我们便利过,是吧?因为二加二加七等于九吗?我们他给的是九是吧? 我们要找元素七我们是否便利过?那么我们是不是上这个麦克里边去查询的,是吧?因为麦存放我们便利过的元素啊? 那因为我便利的是第一个位置,我的脉吧,还没有啊,存放我们便利过的元素,所以说脉不是空,对吧?那此时呢,我们查找这个元素七是否我们便利过呢?哎,发现,哎,我们这个 麦克里边没有,没有的话,我们是不是接下来往后便利是吧?指向下一个元素,指向下个元素,那麦克是用来存什么的?存我们便利过的元 元素,那这个此时元素二我们是不是已经便利过了?是不是应该放在这个 map 集合中,以啊,以方便来我们用来后面来便利的时候来查询我们是否便利过对应的元素,好像 map 里做查询。 那所以说呢,我们要把这个二放进我们的脉盆里啊,这是 k 啊,那么 y 六是什么呢? y 六是零,是吧?存放我们的这个下标啊, 那么我们又变到便利到第二个元素是不是七啊?那么我们此时是不是想找元素二, 我们是不是有便,有没有便利过呀?因为七加二等于九吗?我们想找元素二,我们有没有便利过,那么我们怎么知道我们有没有便利过元素二呢?去迈步里查呀,对吧?那此 此时我们再去迈步理查,是不是找到了元素二啊?因为迈步就是存放我们便利过的元素吗?是吧,那找到了元素二,我们是不是把元素二所对应的下标也找到了,那么此时我们是不是找到了一个 结果级啊?这个结果级符合我们的要求吧,像元素相加等于九,那么他的下标是什么呢?啊? 在这里我们找到了二,那么我们就找到了对应的下标是零,那么我们此时便利的是这个下标一的位置是吧?一的位置存放的七吧,所以说一零 这个下标所存放的元素相加就等于我们的目标值啊。那其实呢,这个就是呃,整个这道题目的解题思路啊,那么我在讲 讲解这个解题思路里呢,重点讲了几点啊?应该是讲了四点啊。呃,首先是这道题目为什么会想到用哈西法,那么明白了这道题目的整个啊解题思路之后呢,我们再来看一下具体的代码应该怎么写啊,其实这个思路哦, 就是想清楚之后呢代码就很容易了啊。那岁月家里边 map 其实是有三种 map 的啊,有一个是 map, 有个是 an order 的 map, 还有一个是 monty map 啊, 那 map 和 monkey map 它底层实现是烘黑术啊,这个啊, order map 它,呃底层实现是一种哈西结构啊,直接做映射的啊。那么本题 呢,我们要使用安 outer 的卖法啊,因为他用来存和读效率是最高的,至于为什么啊,大家呢,去看啊,我在代码所养录网站上啊,哈西表张杰有本期视频的文字版, 我对于 c 家家里边的这三种术语结构做了详细的分析,什么情况下应该用哪个?每种术语结构的增山改查的时间复杂度又是什么? 在这里呢,我就不去做详细的讲解了啊啊,如果使用 cd 加的同学可以去看一下啊,在文章中呢,我也给出了其他语言版本啊本题的实现的代码, 那么这里呢,我是使用的是 an order 的 map。 好,我们首先呢是定义一个 an order 的 map, 然后这个 app 呢,它的 key 是一个 in, 一个 in 型, y 六也是一个 in 型对吧?啊, 然后呢,我们定义这个 map 啊,再重温一下,我们这个 map 是用来干什么的?是用来存放我们便利过的元素啊,那接下来呢,我们是不是要便利这个数组了是吧啊呃,我们去便利这个数组, i 等于零, i 小于 number, number 词点 size i 加加。然后呢?呃,然后呢,我们是不是在便利中呢,我们要啊寻找我们要查询的值,例如说我们 便利在这里的时候,我们是不是应该查询元素七啊,我们是否便利过?因为七加二等于九吧,那么我 我们要查询的数值等于什么?我假设他等于 s, s 等于他给他减去 我们当前便利的元素,是吧?啊,这是我们要查询的这个值,然后我们就要在脉搏里边去查询了,我们想查我们想要得到这个值,有没有在脉搏里出现过啊?那在这里呢是要写一个 map 的一个便利方式,我在这里呢写的是类似于 c 加加的尾代码啊,大家理解这个意思就可以。 呃,我们去寻找 s, 是吧?那如果啊,我们想要查找的这个元素在 map 里出现过啊, 这就是在啊,这就是我们这个查找这个元素在 mac 里出现过的,类似于 c j 加的一种写法啊, 如果在我们这个 map 里出现过,此时我们是不是找到了啊?两个元素相加等于我们的这个他给他,那么我们是不是要返回对应的下标啊?那一个下标是什么?其中的一个下标,其中一个下标应该是 我们找到的这个元素他所存放的歪溜吧,是吧?是我们的其中的一个下标,还有一个下标是什么? 就是我们当前便利的元素,对吧?我们当前便利元素 i 啊,那此时我们就找到了啊,符合题目要求的一个结果机啊,那如果我们在 麦克里啊,没有找到啊,我们要就是我们想要查询的这个元素,那我们便利下一个元素时候,我们是不是要把已经便利过的元素加入到我们的麦克中啊,对吧,那么 我的 map 是不是应该在这里 insert 音色的什么? k 是什么? k 是元素吧,应该把 numbers 存进来, y 六是什么? y 六是下标吧,再把 i 存进来是吧?啊,我要把这个我们便利过的元素啊,所对应的 k 和 y 六存放到我们的麦克中,因为我们的麦克就是用来存我们便利过的元素的啊。 很多同学呢,看这道题目的时候,代码写到这里很懵逼啊,可能也明白,哎,我们需要用 map 存一下啊,把这个元素存一下,但是也不知道啊,这个麦克他究竟是用来做什么就知道啊,好像我应该存一下啊。然后很多同学呢,这道题目呢,因为这道题目的代码比较简短啊,他可能是背下来了, 就可能就把这个就给忘了啊,就是这个题目代码背着背着这个过程就给忘了,因为他没有理解 mat 是究竟用来做什么的。 那最后呢,如果这个便利结束,我们还没有找到,我们就 reten 一个空的一个集合就可以了。那其实这样呢,这道题目的代码我们就写完了啊,大家可以发现这个代码 并不复杂,对吧?啊,那我这里写的是类似于 cj 家的尾代码,那其他语言的版本,大家可以去代码所有录网站上哈西表章节可以找到啊,本期视频的文字 讲解版啊啊,里面有啊,各个语言的版本啊,可以在例扣上提交,便于运行的。那么本题代码讲完之后呢,大家再来回想一下啊,这道题目的一个啊,解题的一个过程啊,那其实这道题目呢? 呃,代码虽然简短,但是这道题目有啊四个重点啊,第一个重点就是这道题目我们为什么会想到使用哈西法, 对吧?啊,那第二个重点就是我们为什么要用 map 啊?那其实这里边还有一个小的一个问题,就是例如说使用 c 加加的话,为什么要使用按 oder map, 那,那使用其他语言的话,哦,这里边大家着重就要讲啊,我们本题为什么要使用麦克风,那第三个重点呢,就是我们的麦究竟是用来做什么的?在这道 题目里, map 作用究竟是来做什么的?这取决于我们写代码的思路啊,很多同学这行代码不理解就是不理解啊, map 在这道题目里边,它的作用啊,它是用来存放我们便利过的元素啊。那么 第四点呢,就是迈克里边的 k 是用来存什么的, y 六是用来存什么的啊,那把这四点都明确的话,这道题目我相信大家理解的就比较透彻了。那 呃,再去写这个代码的话啊,其实呢,大家就不用靠类似于背啊之类的啊,其实你理解了这个题目的啊,真正的就是解题方法之后呢,这个代码其实他就是一个 很自然而然的就可以写出来了啊。那么好了,这期视频呢,就给大家讲到这里,这里是代码孙杨璐,我是程序员卡尔,感谢大家的三连支持。

哈喽,大家好,我是北漂玉维,欢迎大家收看我的视频,那么这一期来给大家分享一个小知识点,就是 md 五教验器啊,那么我们大家经常在网上下载 软件的时候呢,会看见网站或者是别人跟你分享的时候,同时会给你一个 md 五码或者是哈西的教验器,那么这个教验器他是怎么用的呢? 首先你要想一个场景,那么比如说我想要从我家里给你发一个软件过去,那么我怎么能防止中途我这个软件没有被别人拦截过,篡改 来过,更何况我这个软件放在网站上也有好长的时间了,那么怎么能保证别人没有创改过这个软件到你手就是我当初原原来发布的那个软件呢?那么 如果说我在发布这个软件的同时,我给你一些教验码,比如说 一二三四五六,然后你打开这个软件的时候,你也去降压一下,你看这个特征码跟你的这个下载完的这个文件是一致的,那么就说明我这个 文件或者软件没有被篡改过,对不对?那么说 md 五码他是什么东西呢?呃, m 第五码,你可以这样,他呢本质上就是通过呀 文件的各种的信息,比如说文件的特征,文件的大小,加上文件的格式,还有他的修改时间,生成一串的数字,这个数字就相当于每一个软件的特殊身份证证号啊,你可以这样理解, 那么每一个 md 五码他都是唯一的,所以说他可以作为唯一的教验码来使用,那么在这之后呢, 又衍生出了哈西算法,哈西算法就是在 md 五码之上又多加了一些教研信息而生成的一串子字符串, 用来帮你协助你去教练文件的。那么说这个工具怎么用呢 啊?首先啊,你会拿到一个这个 md 五码或者是哈西的救援器,他本质上也是一个小软件,对吧?然后你直接打开他呢,他是这个样子的, 对吧?然后比如说你需要不,比如说我现在要 发布一个软件,或者是一个压缩包,那么这个时候呢,我把它拖进来,拖进来了以后大家看他就生成了 md 五码和哈西,哈西直啊质量 两串数字,甚至呢还有修改时间和文件大小。那么我把这一串数字都复制到一个文本里面去,随着我这个软件 一起发布,或者是一起给你分享到网盘里面去,同时我会把这个软件和工具也分享给你,那么你下载完之后,你也跟我一样这样读取下这个软件的这些值, 你比对一下,你读出来的这些值呢,跟我放在网盘里,或者是文件,或者是那个 啊网站里面的那个文本,比如说 txt 的文本,那里面的值是一致的,那就说明你下载的这个文件呢, 是完整的,没有被别人篡改过的,如果不一致的话,那么可能这个文件就被损坏过,那你就得重新下载,或者是这个文件就彻底损坏了,那就没法用了啊。 嗯,这个为什么呢?因为啊,你在网盘或者是网站上下载的时候呢,他会把这个软件呀分割成数据流,一针一针一针一针一针,这样传到你的电脑上的,传过来了以后呢, 他会把这些数据针都组合到一起啊,大致哈,大致就是这么一个过程,然后如果说中途这一针丢掉了,哎,那你这个文件读出读取出来之后呢?你的哈吸值和 md 五码他就不一致了,那么这时候你的文件就损坏了啊。好,那么这期视频就给大家分享到这里,我们下期再见,谢谢大家。

如果给你一个一个 g 的 大文件,让你统计里面哪些内容是重复的,但是呢,只给你一百兆的内存啊,你该怎么办 啊?这个是我之前面试时遇到的一个真实的问题,很多同学呢,一听到就蒙了啊,毕竟一 g 的 文件远大于内存对吧,直接读到内存里面肯定就崩啊啊,那这种场景应该怎么设计呢啊?我们先来想一想最直接的思路, 很多人第一反应呢,可能就是说用 hashmap 啊,一行一行来读对吧,把内容当成 key 啊,出现次数呢,就当成哇溜啊,统计呢就完事了。 但是你仔细想一想啊,一记的文件,如果说内容重复率不高的话,内存里面可能要存好几百万条记录,每条记录呢,还有字符串啊,对象啊,还有记录对象啊,一百兆的内存根本扛不住, 分分钟可能就 o m 了,对吧,而且这个还是单线层来读,如果说文件再大一点时间呢,也耗不起,那怎么办呢?既然内存装不下,我们肯定不能把所有的数据都放在内存里面来统计啊,就得换一个思路啊,就是分批处理加外部排序。 其实这类问题呢,在工程里面很常见了,核心思想呢,就是我们怎么去化整为零啊,逐步去做合并。其实具体呢,可以分成三步走, 第一步呢,就是拆分文件啊,把一机的大文件按行来读,每次呢读取一定的这个函数,比如说根据内存的计算啊,每批处理一百兆左右的这个数据, 然后呢,就对这批的数据做哈希分片,比如说根据字母串的这个哈希扣的来取模呀啊,把相同的哈希值的数据写到同一个临时小文件里面, 这样的话呢,相同的内容一定就会被分到同一个文件里面啊,我们可以比如说分成二十个文件,每一个大概啊有五十兆,这样的话呢,内存里面可能每次只处理一个小文件啊,完全是没有问题的。 那么第二步呢,就是逐个来统计,接下来我们对每一个小文件来单独处理了啊,比如说把它加载到内存里面啊,这个时候可能啊,这个文件比较小嘛,我们用这个 hashmap 啊,统计当前这个文件内的这个重复内容啊,就可以啊,基本上没有什么大的影响了。 统计完了以后呢,就可以把结果保存下来啊,比如说啊,内容啊,对应这个次数啊,再写入结果文件里面。 那么第三步呢,就是做这个合并了啊,对结果进行合并,因为所有的这个小文件处理完了之后呢,我们可能还需要去做一些这个去重统计 啊,这个时候呢,因为每一个小文件的这个统计结果已经很小了,我们可以再用一个合并阶段啊,比如说把所有的结果再次加载合并重复下,如果结果呢还是太大了啊,可以再进一步的做这个封面的合并。 当然可能有同学会问啊,啊,有没有更省事的一些方法呢?有,当然有,如果说你只是想知道啊,哪些内容重复,而且不需要做精确的统计次数,可以用这个波轮过滤器,对吧?先做一层这个驱虫判断 啊,他用很小的内存呢,就能够判断出来哪一个内容他可能会重复出现,但是注意啊,这里面可能会有一定的这个误判在里面啊,适合做这个初步的筛选啊,然后呢再做这个精确的统计, 那么还有一个思路呢,就是如果说呢文件是日制类的啊,顺序型的数据,并且呢允许近似计算,那么就可以用呢哈希加未知的方式来做概率的统计,但是这种呢就属于那种特件场景的优化啊,在这里呢我们就不做展开了, 那么在实际的面试或者工程里面呢,这类问题其实也是在考察你的三个能力啊,一个呢是对内存和文件系统的这个敏感性, 第二个呢就是你的分制思想的这个应用能力,第三个呢就是对这个数据结构啊,还有这个算法的灵活应用, 所以下次呢,你遇到这类比如说这个大文件小内存的场景呢,别一头栽进了全加载到内存的这样的一个陷阱里面,记住啊,一定是要做拆分制和 啊,很多问题呢,就是如果你对本期内容呢有任何疑问,欢迎大家评剧鼓励,谢谢大家!


哈西算法三大特点,哈西算法呢?大家先了解一下他和这个私密性,私密性用的是加密算法, 他是有区别的。哈西算法是哈西算法,加密算法是加密算法,这两者是有区别的,所以我在这个你们上安全学习,安全之前呢,我先把这两个东西给大家先树立一下啊。首先哈西算法呢?他不是加密算法,为什么呢?因为哈西算法有三大特点 啊?还是算法他有三个特点,是哪三个特点呢?我给大家简单介绍一下啊。第一个特点呢是他等长的输入, 等长的输出。第二个特点是什么呢?第二个特点就是它是,呃,叫做什么?叫做雪崩效应,这个叫雪崩效应,就是有一片雪花导致了一场雪崩, 听懂了吗?啊?所以这个就是他的一个最大的一个特点,这两个特点其实就是还是算法当中的绝对特点。当然第三个特点就是他不能逆向计算。

今天我们具体讲什么是一致性哈西算法和上一个视频一样,我们使用把用户 id 哈西到四台 radis 服务器之一的场景一致性哈七会把四台 radis 服务器放到原上。我们假设原上有零到十一共十二个节点, 其中二、五、八、十一四个节点为 radys 节点,其他节点为空节点。一致性哈西算法分两步, 第一步,对用户 id 除以十二得到余数,这里十二就是这个圆上的节点总数,此时余数必然对应一个节点,我们命名为余数节点。第二步,顺势争取距离余数节点最近的 radis 节点。如果余数节点本身就是 radis 节点, 索取自己即可。比如 id 为一百三十五的用户,一百三十五除以十二,余数为三,三号节点为空节点。我们从三号节 点顺时针往下找,四号节点也是空节点,五号节点是 radis 节点,所以 id 为一、三、五的用户信息就存储在五号节点代表的 radis 上。再比如, id 为一百三十四的节点除以十二,余数为二、二、 二号节点正好是 radis 节点,所以 id v 一、三、四的用户信息就存储在二号节点代表的 radis 上。下个视频继续讲解一台 radis 故障的情况。另外,前面的例子不知道我讲明白了没有,如果没有,麻烦留言告诉下我。如果讲明白了,那就点赞关注下吧!