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