什么是哈希
Hash,一般翻译做散列、杂凑,或音译为哈希,是指把任意长度的输入(又叫做预映射pre-image)通过哈希算法变换成固定长度的输出的过程,该输出就是哈希值。
哈希算法(哈希函数)
哈希算法指的是能把任意长度的输入变换成固定长度输出的一系列算法。大家都知道数学中的函数如y=x+1, 通过改变x的值,我们可以得到对应的y。哈希函数其实也一样,通过传入不同的输入得到对应的输出,不同的是哈希函数的输入不仅限于数学中的数字,并且它的输出是固定长度的,具有一定规则的。常见的哈希算法有MD5, SHA-1, SHA-2, UUID1, UUID…
哈希冲突
理论上哈希算法输入跟输出的映射关系应该是一对一的,但是会有一定概率出现多个输入对应一个输出,即不同的x值得到了同样的y值,这种情况叫哈希冲突。解决哈希冲突也有许多常见的方法,比如拉链法,线性探查法…可以自行去了解
哈希取模
哈希取模是指对hash结果取余。假设我们现在需要对数据库进行分表分库。需要把user表分成10个表,这时我们只需对user_id进行哈希取模,即user_id.hash() % 10, 假设user_id.hash()等于12, 则把该记录存入第2(12 % 10 = 2)个表中。取值的时候重复上面步骤即可知道从哪个表查询我们想要的数据了。但是假设我们的用户有激增了,我们需要从10个表分成20个表,这个时候我们通过user_id.hash()%20去查数据肯定查不到之前的数据了,应为之前是通过user_id.hash() % 10去存储的。要解决这个问题ÿ