nodejs fnv模块生成hash值

本文介绍了一种针对字符串类型的ID进行哈希处理的方法,并利用该哈希值确定数据存储的具体服务器位置,以实现分布式存储的目的。具体实现中采用了fnv-plus模块来计算字符串的哈希值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

aed221e1715f076c5f435fd1e417b24315f.jpg

我们常常对一个拼接的变量进行映射,让一个变量通过一定的算法得出一个可控的结果然后在操作.比如淘宝的分布式存储,淘宝会根据注册用户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位哈希散列值时,这里返回一个对象.如下图.

1beb12cf7f021ae4008c172cddffa10f697.jpg

返回的这对象告诉你此散列值是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

转载于:https://my.oschina.net/u/3797834/blog/1831279

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值