redis bitmaps(译文)

翻译 2016年08月31日 11:37:08

Bitmaps

原文链接请猛戳这里

bitmaps不是一种实际的数据类型,本质上说,它是定义在字符串类型上的一组位操作方法。单个bitmaps的最大长度是512MB,即2^32个比特位。

有两种类型的位操作:一类是对特定bit位的操作,比如设置/获取某个特定比特位的值。另一类是批量bit位操作,例如在给定范围内统计为1的比特位个数。

bitmaps的最大优势是节省存储空间。例如,在一个以自增id代表不同用户的系统中,我们只需要512MB空间就可以记录40亿用户的某个单一信息(比如,用户是否希望接收新闻邮件)。

可以通过setbitgetbit命令对bitmaps进行设置和读取:

> setbit key 10 1
(integer) 1
> getbit key 10
(integer) 1
> getbit key 11
(integer) 0

setbit命令接收两个参数,第一个参数表示你要操作的是第几个bit位,第二个参数表示你要将这个位设为何值,可选值只有0,1两个。如果所操作的bit位超过了当前字串的长度,reids会自动增大字串长度。

getbit只是返回特定bit位的值。如果试图获取的bit位在当前字串长度范围外,该命令返回0。

有三个命令可以操作成组的bit位:
- 1.bitop:对两个不同字串进行位运算。可进行的运算有AND, OR, XOR以及NOT。
- 2.bitcount: 给出被设置为1的bit位的个数
- 3.bitpos: 查找第一个值为0/1的比特位的位置

我们可以为bitpos和bitcount指定查找范围。下面是一个bitcount的例子:

> setbit key 0 1
(integer) 0
> setbit key 100 1
(integer) 0
> bitcount key
(integer) 2

通常你可能在这些地方用到bitmaps:
- 各种实时统计分析
- 与id相关的bool信息,要求高效操作且节省存储空间。

例如你想知道自己网站用户的最长连续访问天数。从0开始计数,每当有用户访问时,使用setbit设置一个bit位,bit位的index可以这样生成:(当前unix时间戳-计数开时时的时间戳)/(3600*24)。

通过这种方法,你可以获取每个用户的每日来访记录。使用bitcount可以很容易的统计出某个特定用户的来访天数。使用几个bitpos命令,或者直接获取并分析对应的位图,就可以很容易的算出最长连续访问天数。

bitmaps通常被分割成多个key,以免单个key中存放的数据过大。有一个分割key的小技巧:每个key存放M个bit位,key以”比特数(bit-number)/M”命名。第N个bit位,对应key中的位置用”比特数(bit-number)模M”获得。

例:(译者增加)

假设我们每个key只存储100位,现在有一个id为8303的用户来访问。那么这个用户对应的key应该是83(8303/100),在key:83中,与之对应的位置应该是3(8303 mod 100)。使用如下命令记录该用户访问:

setbit 83 3 1

Redis-Bitmaps应用

Redis-Bitmaps应用 一.数据结构模型 Redis提供的Bitmaps这个“数据结构”可以实现对位的操作。Bitmaps本身不是一种数据结构,实际上就是字符串,但是它可以对字符串的位进行操作...
  • sunhuiliang85
  • sunhuiliang85
  • 2017年07月11日 15:49
  • 929

Redis Bitmaps简介

Redis Bitmaps简介Bitmaps并不是实际的数据类型,而是定义在String类型上的一个面向字节操作的集合。因为字符串是二进制安全的块,他们的最大长度是512M,最适合设置成2^32个不同...
  • iycynna_123
  • iycynna_123
  • 2017年05月09日 08:55
  • 874

redis 用setbit(bitmap)统计活跃用户

Redis支持对String类型的value进行基于二进制位的置位操作。通过将一个用户的id对应value上的一位,通过对活跃用户对应的位进行置位,就能够用一个value记录所有活跃用户的信息。如下图...
  • lglgsy456
  • lglgsy456
  • 2014年09月19日 10:34
  • 16270

用Redis bitmap统计活跃用户、留存

Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作。       原文:http://blog.getspool.com/2011/11/29...
  • hguisu
  • hguisu
  • 2013年06月27日 21:05
  • 13741

redis bitmap 入门

1.简介 bigmap是通过类似map结构存放0或1(bit 位)作为值,一般用来统计状态.如:日活,是否浏览过某个东西 2.setbit redis 127.0.0.1:6379>...
  • u010670689
  • u010670689
  • 2015年05月20日 11:27
  • 3205

高效使用Bitmaps(二) 后台加载Bitmap

文章来源:http://my.oschina.net/rengwuxian/blog/183802 摘要 有没有过这种体验:你在Android手机上打开了一个带有含图片的ListView...
  • l_215851356
  • l_215851356
  • 2016年05月24日 14:03
  • 297

高效使用Bitmaps(二) 后台加载Bitmap

高效使用Bitmaps(二) 后台加载Bitmap 发表于5天前(2013-12-12 01:33)   阅读(654) | 评论(3) 46人收藏此文章, 我要收藏 赞4 ...
  • y8525640
  • y8525640
  • 2013年12月16日 12:34
  • 468

使用Redis bitmaps进行快速、简单、实时统计

原文:Fast, easy, realtime metrics using Redis bitmaps  (http://blog.getspool.com/2011/11/29/fast-...
  • u011547353
  • u011547353
  • 2014年03月28日 17:43
  • 802

Redis BitMap适应场景

Bitmap以及Redis Bitmaps快速入门(Crash Course on Bitmap and Redis Bitmaps) Bitmap(即Bitset)     Bitmap是一串连...
  • paul_wei2008
  • paul_wei2008
  • 2016年11月27日 20:29
  • 1002

用Redis bitmap统计活跃用户、留存

Spool的开发者博客,描述了Spool利用Redis的bitmaps相关的操作,进行网站活跃用户统计工作。       原文:http://blog.getspool.com/2011/11/29...
  • hguisu
  • hguisu
  • 2013年06月27日 21:05
  • 13741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:redis bitmaps(译文)
举报原因:
原因补充:

(最多只允许输入30个字)