- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
看完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
0
和 8
是唯一具有访问权限的对象——比仅设置时间戳更好: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/
我是 redis 的新手,所以我有很多关于 setbit 函数的问题。 我有以下类型的数据集: {'items':[{'item_1':0001...1000, ...
我曾尝试在 Redis 中使用 setbit 存储位,例如setbit mykey 123 1 并且还使用超过最大 int 值 2147483647 + 100 作为偏移值,所以它会像这样: setb
> setbit mykey 1 1 > setbit mykey 7 1 当我将字符串值 1 和 7 存储到“mykey”中时,redis 中到底存储了什么?以及 getbit 在 redis 中是
我必须在 Java 中实现以下 Delphi 函数,但无论如何 TBitRange 类型让我感到困惑。 Java 中是否有其他替代方案?也许有人可以解释一下这个函数到底在做什么。 谢谢。 const
我在这里看到了答案:http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_2:Exercise_6 我已经测试了第一个,但在这部分: x = 29638;
看完Can someone explain redis setbit command? 和http://blog.getspool.com/2011/11/29/fast-easy-realtime-
你能帮我吗?我使用 hive 0.10.0 hive > 显示表; Exception in thread "main" java.lang.NoSuchMethodError: org.apache
我是一名优秀的程序员,十分优秀!