1.基本概念
哈希也成为“散列”:任意长度的输入,经过哈希算法变换成固定长度的输出。
哈希值会产生碰撞,因为固定长度的哈希值表示的范围是有限的,但输入值的范围是无限的。
通过原始数据通过相同的哈希算法可以计算出相同的哈希值,但是通过哈希值无法恢复原始数据
不同的哈希算法,哈希值长度不同,但相同的哈希算法,哈希值长度固定。哈希值的长度越长越安全。(出现碰撞的概率越低)
2.常用的哈希算法
最简单的哈希算法就是取模运算。比如共有10个数,对9取模,则1至9对9取模的结果分别为1,2,3,4,5,6,7,8,9。10对9取模的结果为1,则1和10经过该哈希运算后结果发生碰撞。
常用的哈希算法包括:MD5、SHA-1、SHA-2等,目前除了SHA-2以外,其他算法都产生过碰撞。
3.哈希算法的用途
可用于:文件校验(验证两个文件是否为同一个文件)、数字签名、鉴权协议等。
4.一致性哈希算法
4.1 要解决什么问题?
在互联网中经常需要对服务器扩容,比如之前有5台服务器,现在要扩容到6台。如果有个数据存储在服务器1(假设数据对5取模结果为N就存储在第N台服务器) ,当服务器从5台扩容至6台,则数据请求将对6取模,其结果将和5取模完全不同,导致缓存服务器全部失效,所有数据都需要直接命中数据库,然后重新缓存,造成大量的性能浪费。为解决这个问题而形成了一致性哈希算法。
4.2 一致性哈希算法的概念
1)将