gpt4 book ai didi

bitmap - Redis SETBIT、GETBIT、BITCOUNT 的用例?

转载 作者:IT王子 更新时间:2023-10-29 06:01:15 27 4
gpt4 key购买 nike

看完Can someone explain redis setbit command?

http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/ (在 redis 文档中引用)

我仍在努力确定使用 SETBIT 而不是 SET 的用例。上述来源似乎引用了使用 SETBIT 以二进制形式存储事件和“可数”数据集的驱动因素,因为它有助于显着减少您需要存储的数据量,同时仍然保持易用性-访问。

按位图 100000001 中的用户 ID(通过从 0 开始的偏移量标识)存储每日对网站的唯一访问——其中用户具有 ID 08 是唯一具有访问权限的对象——比仅设置时间戳更好:userID?请解释。谢谢。

对于这显然是一个新手问题,我深表歉意。

最佳答案

答案是:视情况而定。在上面的用例中,它取决于您每天的登录次数(位掩码中有多少位处于事件状态)。例如,如果您有 2 个登录名或随机用户 ID,最好只存储一个登录名列表。

但是如果你有一个活跃的用户群并且所有用户中有 60% 是活跃的..结果是必须存储 1 位(实际上它比平均少,因为 redis 只存储位掩码直到最高设置位(1) is reached) 比将 ID 存储在列表中对内存更友好。在列表中存储 ID 将导致使用例如32位(整数)来表示一个1位的信息,很浪费。如果列表使用一些带有指向相关节点的显式指针的树概念,它可能会更多。由于我们的 RAM 有点昂贵/有限并且我们希望事物也具有可扩展性,因此应该以最小的内存使用为目标,同时仍满足所有查询要求。

所以这是我会根据用例来决定的事情。

但是,使用位掩码可以非常快速地对庞大的数据集进行批量过滤。假设您存储了 2 个位掩码:1 个是 loggedInToday,1 个是 signedUpForNewsletter。通过使用像 AND 这样的位操作(处理器可以非常快地执行这些操作),您可以突然过滤掉所有今天登录并注册新闻通讯的用户 ID(由 1 的位表示)。因为位掩码的交集比两个有序的 id 列表的交集至少快一个数量级,所以您可以突然对数百万用户执行此操作并且仍然保持在 50 毫秒以下。

总结一下我的回答:位掩码的使用允许进行一些实时分析,否则这些分析将不是实时的,并且如果您期望列表中有很多项目,可以为您节省大量内存。 请注意,这只是一种用法,还有许多其他用法(如布隆过滤器)。

关于bitmap - Redis SETBIT、GETBIT、BITCOUNT 的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30269158/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com