4

我需要计算一个应用程序的每日唯一用户数。

我可以唯一识别用户的唯一方法是通过他们的 UUID(这是外部提供的,所以我被迫使用它)。

我知道我的每日用户数是几百万用户。

我想在 Redis 中使用 bitset 来进行人口计数,但为了使其工作,我需要一种缩小 UUID 的方法,以便它可以轻松适应 long 。我知道发生碰撞的可能性,但我并不关心精确的数字。

以前有人用Java做过吗?我所追求的是如何将我的 UUID 转换为可以放入 long 的东西。

4

3 回答 3

3

您可以生成生成整数或长整数的 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);
于 2012-07-27T14:41:11.883 回答
3

对象上有两种UUID可能对您有益的方法。

getLeastSignificantBits()getMostSignificateBits()。两者都返回很长。将其中一个作为您的答案(如果您愿意,也可以选择某种组合。)

于 2012-07-15T22:48:56.613 回答
2

这可能足够小,可以直接使用完整的 UUID 作为哈希键。如果适合您的需要,也可以使用更少的内存进行近似。

于 2012-07-16T02:18:45.117 回答