展开

关键词

redis灵魂拷问:聊一聊bitmap使用

这时就要用到bitmap的聚合运算了,命令BITOP, 支持AND(与)、OR(或), XOR(异或) and NOT(非)运算,除了NOT后面跟一个bitmap外,其他3种聚合运算后面都可以跟多个bitmap ,命令如下: BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN BITOP NOT destkey srckey 为了让demo简单一些 ,我这里给出一个查看2天内没有迟到的员工,代码如下: /** * 命令:BITOP * 复杂度:O(N) * 整个月全勤的员工数量,这里用2天代表整个月 * @param key1 第一天 * 比如我们对一个10亿的用户进行日活计算,占用的空间只有120M: 10亿/8/1024/1024=120M 官网链接: https://redis.io/commands/bitop

17020

Redis 位域

and key3 key1 key2 (integer) 1 127.0.0.1:6379> get key3 " " 4.2 对一个或者多个key进行逻辑或运算,并将结果保存到key4中 bitop or destkey key [key...] key1二进制值为0110 0000 key2二进制值为0010 0000 "`" 二进制值为0110 0000 127.0.0.1:6379> bitop or key4 key1 key2 (integer) 1 127.0.0.1:6379> get key4 "`" 4.3 对一个或者多个key进行逻辑异或运算,并将结果保存到key5中 bitop xor key5 key1 key2 (integer) 1 127.0.0.1:6379> get key5 "@" 4.4 对给定key进行逻辑非运算,并将结果保存到key6中 bitop not destkey key key1二进制值为0110 0000 "\x9f"对应二进制值为1001 1111 127.0.0.1:6379> bitop not key6 key1 (integer)

8830
  • 广告
    关闭

    【玩转 Cloud Studio】有奖调研征文,千元豪礼等你拿!

    想听听你玩转的独门秘籍,更有机械键盘、鹅厂公仔、CODING 定制公仔等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    redis | 十一、redis之Bitmaps

    6379> setbit bitmap 8 1 (integer) 0 127.0.0.1:6379> bitcount bitmap (integer) 14 127.0.0.1:6379> 4. bitop 127.0.0.1:6379> set hello good OK 127.0.0.1:6379> set world good OK 127.0.0.1:6379> bitop and hello_world hello world (integer) 4 127.0.0.1:6379> get hello_world "good" 127.0.0.1:6379> bitop or hello_world hello world (integer) 4 127.0.0.1:6379> get hello_world "good" 127.0.0.1:6379> bitop not hello_world hello (integer) 4 127.0.0.1:6379> get hello_world "\x98\x90\x90\x9b" 127.0.0.1:6379> bitop xor hello_world

    5910

    Redis(8)——Bitmaps

    unique:users:2019-04-28 (integer) 4 127.0.0.1:6379> bitcount unique:users:2019-04-28 1 10 (integer) 3 bitop 30 5 1 (integer) 0 127.0.0.1:6379> setbit unique:users:2019-04-30 8 1 (integer) 0 127.0.0.1:6379> bitop :2019-04-30 (integer) 3 127.0.0.1:6379> bitcount user:and:2019-04-28-30 (integer) 0 127.0.0.1:6379> bitop users:2019-04-30 (integer) 3 127.0.0.1:6379> bitcount user:or:2019-04-28-30 (integer) 8 127.0.0.1:6379> bitop not user:not:2019-04-28 unique:users:2019-04-28 (integer) 3 127.0.0.1:6379> bitop xor user:xor:2019-

    36220

    Redis字符串(STRING)中BIT相关命令

    了解前面的文章有助于更好的理解本文: ---- 1.Linux上安装Redis 2.Redis中的五种数据类型简介 3.Redis字符串(STRING)介绍 ---- BIT相关的命令是指BITCOUNT/BITFIELD/BITOP BITOP BITOP可以对一个或者多个二进制位串执行并(AND)、或(OR)、异或(XOR)以及非(NOT)运算,如下:a对应的ASCII码转为二进制是01100001,c对应的二进制位串是01100011 对这两个二进制位串分别执行AND\OR\XOR的结果如下: 127.0.0.1:6379> set k1 a OK 127.0.0.1:6379> set k2 c OK 127.0.0.1:6379> BITOP :6379> get k3 "c" 127.0.0.1:6379> BITOP xor k3 k1 k2 (integer) 1 127.0.0.1:6379> get k3 "\x02" 另外,BITOP 也可以执行NOT运算,但是注意参数个数,如下: 127.0.0.1:6379> BITOP not k3 k4 (integer) 1 这里会对k4的二进制位串取反,将取反结果交给k3.

    52480

    Redis教程04(String类型之BIT)

    命令 说明 getbit 获取二级制中对应偏移量的值 setbit 设置对应二进制位的值 bitcount 统计二进制中位中为1的个数 bitop 对二进制数据做位元操作,与,或,非,异或操作 bitpos BitOp命令 对一个或多个保存二进制位的字符串 key 进行位元操作,并将结果保存到 destkey 上。 BITOP 命令支持 AND(与) 、 OR(或) 、 NOT(非) 、 XOR(异或)运算。 比如a 01100001和c 01100011进行相关运算 127.0.0.1:6379> get k1 "a" 127.0.0.1:6379> get k2 "c" 127.0.0.1:6379> bitop 127.0.0.1:6379> bitop not k6 k1 (integer) 1 127.0.0.1:6379> get k6 "\x9e" BitPos命令 返回字符串里面第一个被设置为1或者

    23950

    Redis点赞新思路 bitmap

    BITOP operation destkey key [key ...] ,operation 可以是 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种:● BITOP AND destkey key [key ...] ● BITOP OR destkey key [key ...] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey 。 ● BITOP XOR destkey key [key ...] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey 。 ● BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 。

    77710

    Redis 亿级用户信息存储实践:bitmap 位图存储

    key key offset value 用于修改指定key对应的值,中对应offset的bit 3、 bitcount key [start end] 用于统计字符串被设置为1的bit数 4、bitop or 获取一周内访问过的用户数量 3、连续三天访问的用户数量 bitop and 4、三天内没有访问的用户数量 bitop not 5、统计在线人数 设置在线key:“online:active”,当用户登录时 说明:BITOP 命令支持 AND 、 OR 、 NOT 、 XOR 这四种操作中的任意一种参数 //日期对应的活跃用户 $data = array( '2020-01-10' => array PHP_EOL; $redis->bitOp('AND', 'stat1', 'stat_2020-01-10', 'stat_2020-01-11', 'stat_2020-01-14') . PHP_EOL; $redis->bitOp('AND', 'stat2', 'stat_2020-01-10', 'stat_2020-01-11') .

    68020

    Redis基础与高级

    注意返回bit位,不是在某个字节段中的bit位,而是整个key完整bit长度里的bit位 bitcount bitcount key start end 字节位start 和end中1出现的次数统计 bitop 语法 :bitop 操作 目标key key [key ...] eg 进行k1 k2的按位与 bitop and xxkey k1 k2 bitop or xxkey k1 k2 Hash

    6910

    redis的bitset实战

    .20180906 102400000 0 setbit login.20180905 201400000 1 GETBIT 时间复杂度为O(1) getbit login.20180905 201400000 BITOP 时间复杂度为O(N) bitop or login.9m.week1or login.20180905 login.20180906 getbit login.9m.week1or 201400000 对于bitset的操作要注意,各个操作的时间复杂度,如果是getbit、setbit则都是O(1),bitop、bitcount、bitpos等都是O(N),在N比较大的时候要注意,可能是潜在的慢查询 doc setbit getbit bitop bitpos bitcount Efficient analytics with Redis bitmaps Be Careful With your Redis

    1.2K10

    利用 Redis 位运算快速实现签到统计功能

    统计一周内的签到数据 bitop - BITOP operation destkey key [key ...] destkey 上 AND : 对一个或多个 key 求逻辑并OR : 对一个或多个 key 求逻辑或XOR : 对一个或多个 key 求逻辑异或NOT : 对给定 key 求逻辑非 $redis->bitop $redis->bitCount('threeAnd'); $redis->bitop('OR', 'threeOr', 'login:20190311', 'login:20190312', 'login $redis->bitCount('threeOr'); $redis->bitop('AND', 'monthActivities'', $redis->keys('login:201903*')

    2.9K30

    Redis系列(十九)独立功能之bitmap(位图)

    本文假设读者对于位图这个数据结构,有基本的认识 目录 介绍 简单使用 相关命令 Redis 客户端示例 Java 代码示例 python 代码示例 进阶使用 实现原理 GETBIT SETBIT BITCOUNT BITOP BITOP AND destkey srckey1 srckey2 srckey3 ... srckeyN BITOP OR destkey srckey1 srckey2 srckey3 ... srckeyN BITOP XOR destkey srckey1 srckey2 srckey3 ... srckeyN BITOP NOT destkey srckey 其中 destkey 是结果存储的 key 实现原理 本节简单介绍下GETBIT,SETBIT,BITCOUNT, BITOP等几个命令的实现原理。 BITOP Redis 是基于 C 语言的,C 语言支持对字节进行与,或,异或,非操作,因此 BITOP 操作就是调用 C 语言的对应逻辑实现的。

    90950

    使用Redis统计活跃用户

    (1)设置关键字的指定offset的值为 0 或 1 > setbit key 100 1 (2)bit运算 例如 key1 -> 0101 key2 -> 0011 and 运算 > bitop and ret key1 key2 就是对 key1 key2 各位进行 and 运算后赋值给 ret,结果为 0001 or 运算 > bitop or ret key1 key2 就是对 1 (2)统计今天登录的用户数 > bitcount userlogin:20160118 (3)统计3天内都登录过的用户 “都登录过”是要取得bit值都为1的,通过 and 计算获取 > bitop

    89060

    Redis字符串类型的API

    many) mset k1 v1 k2 v2 k3 v3 …… kn vn mget k1 k2 k3 …… kn image.png 高级操作: getbit / setbit: bitcount: bitop bitcount: 获取key范围内为1的二进制位数 bitcount key start end (注意:start,end指是value位置,而不是value对应位图的位置) image.png bitop :对多个key的位图进行 与/或/亦或/非操作 (and or xor not) bitop 操作 目的key key1 key2 key3 .... image.png

    14700

    redis的字符串string操作命令

    setbit test 2 0 3)bitop operation destkey key1 [key2 ...] operation 可以是 AND、OR、NOT、XOR 4)bitop operation destkey key1 [key2 ...] ,key不能写多个 setbit lower 7 0 setbit lower 2 1 构造一个 0010 0000 任何字母只要和他取或(or) 关系,则变成小写字母 set test Q bitop or result test lower get result的结果为q 同理,一个小写字母转换为大写字母的也很容易,只需要提前构造1101 1111(upper) bitop and result

    20240

    域名投资大佬Mike Mann售9枚域名价格达百万

    这9枚域名分别是Bitop.com(3.9万美金)、maistro.com(3万美金)、MonarchWealth.com(2.6万美金)、FeedDepot.com(2万美金)、Mookai.com( 不少域名已经 持有多年,其中域名Bitop.com和StandCorrected.com均是在2009年的时候拿下。虽然收购和售出的间隔时间比较长,但获利还是非常喜人的。

    34200

    面试杀手锏:Redis源码之BitMap

    2.命令实战 Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个常用命令用于处理二进制位数组。 BITOP:对多个位数组进行按位与、或、异或运算。

    15750

    Redis 常用命令-下

    setbit bit1 0 1 setbit bit1 1 1 setbit bit2 2 1 setbit bit1 3 1 注意:在设置位图数据时只能传入二进制数据 0 或 1 用 bitop 对位图进行运算 通过 bitop 命令能对多个位图数据进行运算。 其中操作符可以是 AND,也可以是 OR,还可以是表示异或的 XOR 或者表示取反的 NOT; bitop and result bit1 bit2 bitop or result bit1 bit2 bitop not result bit1 bit2 bitop xor result bit1 bit2 bitcount 命令能统计键为 key 的位图里 1 出现的次数。

    13340

    高手一出手 9枚域名获利百万元以上!

    [图片]   外媒报道,Mike mann在11月份公开的销售记录中总计卖出了9枚域名,总销售价格高达171164美元(约113.2万元),这9枚域名包括Clann.com、 bitop.com、maistro.com 等,我们且具体来看看:   Bitop.com:这枚域名由bi和top组合而成,很适合搭建“币”类相关的平台。

    51100

    10亿数据量只需要100MB内存,redis的位存储为什么这么牛?

    BITOP 语法:BITOP operation destkey key [key...] 即:命令 操作 结果目标key key1 key2 ... bitop命令可以对多个位数组的key进行and(按位与)、or(按位或)、xor(按位异或)运算,并将运算结果设置到destkey中: ? 0 0 1 0 | 0 0 0 0 | 0 0 0 0 | 1 0 0 0 时间复杂度 GETBIT命令时间复杂度O(1) STEBIT命令时间复杂度O(1) BITCOUNT命令时间复杂度O(n) BITOP

    3.2K10

    扫码关注腾讯云开发者

    领取腾讯云代金券