位图在Redis中高效存储与应用实践.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

应用3:节⾐缩⻝——位图

在我们平时开发过程中,会有⼀些bool型数据需要存取,⽐如用户

⼀年的签到记录,签了是1,没签是0,要记录365天。如果使用普

通的key/value,每个用户要记录365个,当用户上亿的时候,需

要的空间是惊人的。

为了解决这个问题,Redis了位图数据结构,这样每天的签到记

录只占据⼀个位,365天就是365个位,46个字节(⼀个稍⻓⼀点的

字符串)就可以完全容纳下,这就大大节约了空间。

位图不是特殊的数据结构,它的内容其实就是普通的字符串,也就是

byte数组。我们可以使用普通的get/set直接获取和设置整个位图

的内容,也可以使用位图操作getbit/setbit等将byte数组看成

「位数组」来处理。

当我们要统计月活的时候,因为需要去重,需要使用set来记录所有

活跃用户的id,这⾮常浪费内存。这时就可以考虑使用位图来标记

用户的活跃状态。每个用户会都在这个位图的⼀个确定位置上,0表

示不活跃,1表示活跃。然后到月底遍历⼀次位图就可以得到月度活

跃用户数。不过这个方法也是有条件的,那就是userid是整数连续

的,并且活跃占⽐较高,否则可能得不偿失。

本节略显枯燥,如果读者看的有点蒙,这是正常现象,读者可以跳过

阅读下⼀节。以⽼钱的经验,在⾯试中有Redis位图使用经验的同

学很少,如果你对Redis的位图有所了解,它将会是你的⾯试加分

项。

应用3:节衣线食——位图

我们平时的开发过程中,有一些bool数据需要记录,比如1年的用户

记录,365天1条记录,0条记录。

为了解决这个问题,Redis了一种数据结构,使得每天的日期只能占

用一个位置,365天就是365个位置,可以完全容纳46个字节(一组字

符),因此可以容纳很大的空间。

位图并不是一种特殊的数据结构,它的内容实际上是普通的字符串,

即字节数组。

当我们想要计算活跃用户数时,需要使用集合来记录活跃用户ID,

这样非常浪费内存。这时我们可以考虑使用用户ID来标记用户的活

跃状态。

本节略月枯燥,如果读者看到一点点,这是正常现象,读者可以跳

过阅读下一节。面试中对Redis的经验很少。

基本使用

Redis的位数组是自动扩展,如果设置了某个偏移位置超出了现有的

内容范围,就会自动将位数组进行零扩充。

接下来我们使用位操作将字符串设置为hello(不是直接使用set指

令),首先我们需要得到hello的ASCII码,用Python命令行可以

很方便地得到每个字符的ASCII码的二进制值。

bin(ord(h))

0b1101000#-低位

bin(ord(e))

0b1100101

bin(ord(l))

0b1101100

bin(ord(l))

0b1101100

bin(ord(o))

0b1101111

基本使用

Redis的本地数组是自动扩展的,如果你设置的某个偏移位置超出了

已有的内容范围,就会自动扩展本地数组。

接下来,我们使用ASCII码将字符串设置为hello。

bin(word(h))0b1101000#

‑低位bin(word(e))

0b1100101bin(word(l))

0b1101100bin(word(l))

0b1101100bin(word(o))

0b1101111

您可能关注的文档

文档评论(0)

wx5620 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档