首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redis SETBIT,GETBIT,BITCOUNT的用例?

Redis SETBIT,GETBIT,BITCOUNT的用例?
EN

Stack Overflow用户
提问于 2015-05-15 21:39:44
回答 2查看 2.4K关注 0票数 3

读完Can someone explain redis setbit command?

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

我仍然很难确定在SET上使用SET的用例。上述来源似乎引用了使用SETBIT存储事件和二进制“可数”数据集的驱动因素,因为它有助于大幅减少所需存储的数据量,同时仍然保持访问方便。

在位图100000001中存储userID网站的每日唯一访问次数(从0中抵消)--其中只有ID 08的用户是唯一进行访问的用户--是否比仅仅设置时间戳:userID更好?请解释一下。谢谢。

我很抱歉,这显然是个新来的问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-24 20:31:41

的答案是:它取决于.,在上面的用法中,它取决于您每天有多少登录(位掩码中有多少位是活动的)。如果您有2个登录名或随机的用户it,最好只存储一个登录列表。

但是如果你有一个活跃的用户群,并且60%的用户是活跃的。事实证明,与在列表中存储ID相比,必须存储1位(实际上小于平均值,因为redis只存储位掩码,直到达到最高的设置位(1) )对内存更友好。将in存储在列表中将导致使用例如32位(整数)来表示1位信息,这是浪费的。如果列表使用的是具有指向相关节点的显式指针的树概念,则可能会更多。由于我们的RAM有点昂贵/有限,而且我们希望东西也是可伸缩的,所以我们应该在满足所有查询要求的同时,尽量减少内存的使用。

所以这是我从用例到用例的决定。

然而,使用位掩码可以非常快速地批量安装庞大的数据集。假设您存储了两个位掩码:一个是loggedInToday,一个是signedUpForNewsletter。通过使用位操作例如和(处理器可以非常快地完成这些操作),您可以突然过滤掉今天登录并注册了通讯的所有用户in (由1的位位置表示)。由于位掩码的交叉点可以由比id的两个有序列表的至少快一个数量级,所以您可以突然对数百万用户执行此操作,但仍然停留在50‘s以下。

来总结我的答案:位掩码的使用允许进行一些实时分析,如果你期望列表中有很多东西,就可以节省大量的内存。注意到,这只是一种用法,还有很多其他的用法(比如布卢姆过滤器)。

票数 2
EN

Stack Overflow用户

发布于 2015-05-16 07:55:27

位是计算机使用的基本数据单元,Redis的BIT*命令允许您轻松地操作位值。在OP提供的示例中,使用比特流将主要节省空间。

为每个登录保留一个密钥将花费(至少)密钥和值的大小,总计约10个字节,而一个比特流只需要每个用户1位。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30269158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档