咱们经常对一个拼接的变量进行映射,让一个变量经过必定的算法得出一个可控的结果真后在操做.好比淘宝的分布式存储,淘宝会根据注册用户ID对64取模,结果确定是小于64的数,就能够根据此数来肯定用户信息存储在64台服务器中的哪一台.node
这里一个前提是会员ID是数值型,若是是字符串怎么办?本文要解决的就是这个问题.git
思路:给字符串求哈希散列码, 而后对固定数值求模,最后肯定该把数据存储到那台服务器上.github
node.js 下有不少求哈希散列值的模块,本文用到的是 fnv-plusweb
github 地址: https://github.com/tjwebb/fnv-plus算法
npm 安装模块(这里就省略不说了)npm
使用:服务器
var fnv = require('fnv-plus');分布式
fnv.hash('xiaoxiao', 64) 这里注意,对 字符串 'xiaoxiao' 求64位哈希散列值时,这里返回一个对象.以下图.ui
返回的这对象告诉你此散列值是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()); 837812702625555003