我需要计算一个应用程序的每日唯一用户数。
我可以唯一识别用户的唯一方法是通过他们的 UUID(这是外部提供的,所以我被迫使用它)。
我知道我的每日用户数是几百万用户。
我想在 Redis 中使用 bitset 来进行人口计数,但为了使其工作,我需要一种缩小 UUID 的方法,以便它可以轻松适应 long 。我知道发生碰撞的可能性,但我并不关心精确的数字。
以前有人用Java做过吗?我所追求的是如何将我的 UUID 转换为可以放入 long 的东西。
您可以生成生成整数或长整数的 uuid 哈希,并将其用于您的人口计数。
看看 jedis redis 库中的“redis.clients.util.MurmurHash”。你可以在https://github.com/xetorthio/jedis找到它
*编辑:样本
UUID uuid = UUID.randomUUID();
ByteBuffer buf = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits());
buf.flip();
int useMe= MurmurHash.hash(buf, 123);
对象上有两种UUID
可能对您有益的方法。
getLeastSignificantBits()
和getMostSignificateBits()
。两者都返回很长。将其中一个作为您的答案(如果您愿意,也可以选择某种组合。)
这可能足够小,可以直接使用完整的 UUID 作为哈希键。如果适合您的需要,也可以使用更少的内存进行近似。