我们常常对一个拼接的变量进行映射,让一个变量通过一定的算法得出一个可控的结果然后在操作. 比如淘宝的分布式存储,淘宝会根据注册用户 ID 对 64 取模,结果肯定是小于 64 的数,就可以根据此数来确定用户信息存储在 64 台服务器中的哪一台.
这里一个前提是会员 ID 是数值型,如果是字符串怎么办?本文要解决的就是这个问题.
思路:给字符串求哈希散列码, 然后对固定数值求模,最后确定该把数据存储到那台服务器上.
node.js
下有很多求哈希散列值的模块,本文用到的是 fnv-plus
github
地址: https://github.com/tjwebb/fnv-plus
npm 安装模块: yarn add fnv-plus
或者 npm install --save fnv-plus
使用:
1 | var fnv = require('fnv-plus'); |
这里注意,对 字符串 ‘xiaoxiao’ 求 64 位哈希散列值时,这里返回一个对象. 如下图.
返回的这对象告诉你此散列值是 64 位,value 是什么,同时还给暴露出 3 个方法,下面一一介绍这 3 个方法:
- dec() 将散列值转化成 10 进制
- hex() 将散列值转化成 16 进制
- str() 将散列值转化为字符串
1 | > console.log(fnv.hash('a string', 64).str()); |