NodeJS 给字符串生成Hash值

我们常常对一个拼接的变量进行映射,让一个变量通过一定的算法得出一个可控的结果然后在操作. 比如淘宝的分布式存储,淘宝会根据注册用户 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
2
var fnv = require('fnv-plus');
fnv.hash('xiaoxiao', 64);

这里注意,对 字符串 ‘xiaoxiao’ 求 64 位哈希散列值时,这里返回一个对象. 如下图.

返回的这对象告诉你此散列值是 64 位,value 是什么,同时还给暴露出 3 个方法,下面一一介绍这 3 个方法:

  • dec() 将散列值转化成 10 进制
  • hex() 将散列值转化成 16 进制
  • str() 将散列值转化为字符串
1
2
3
4
5
6
7
8
> console.log(fnv.hash('a string', 64).str());
1rnie5xrf2iqe

> console.log(fnv.hash('a string', 64).hex());
74451624230fd656

> console.log(fnv.hash('a string', 64).dec());
8378127026255550038

来源: node.js 下给字符串生成一个哈希散列值

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.