我需要计算应用程序的每日独立用户数量。
我唯一能识别用户的方法是通过他们的UUID (这是外部提供的,所以我被迫使用它)。
我知道我每天的用户数是几百万。
我想使用Redis中的位集来进行人口统计,但为了让它工作,我需要一种方法来缩小我的UUID,以便它可以轻松地放入一个长变量中。我意识到了碰撞的可能性,但我并不关心确切的数字。
以前有没有人在Java中这样做过?我所追求的是如何将我的UUID转换成可以放在long中的东西。
发布于 2012-07-16 06:48:57
UUID对象上有两个方法,它们可能会让您受益。
getLeastSignificantBits()和getMostSignificateBits()。两者都返回一个长整型。把其中的一个作为你的答案(如果你关心,也可以是某种组合)。
发布于 2012-07-27 22:41:12
您可以生成您的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-16 10:18:45
这可能足够小,可以直接使用完整的UUID作为散列键。如果less memory适合您的需要,也可以使用它进行近似。
https://stackoverflow.com/questions/11496277
复制相似问题