win和linux的php异或运算结果不同 作者:matrix 被围观: 3,383 次 发布时间:2015-06-17 分类:兼容并蓄 零零星星 | 3 条评论 » 这是一个创建于 2633...> 真是狗日的xor仙人板板。为什么换成xor结果和^又不同。 难道xor不是异或。。。 Q1:幸好我不是第一个发现。...php开启了GMP:gmp_xor()进行xor运算 Q2:无解 将^ 换成xor运算win和linux的结果都一样。...但是为毛线它又和^的结果不同。。。 应该也是整数溢出吧。。。...懒得想了 参考: php异或运算的不可靠性 http://php.net/manual/zh/ref.gmp.php http://bbs.csdn.net/topics/390566090
在实际应用中,一般不会更改 Redis 服务器的数据库个数,但是当不同的应用同时使用同一个 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 出现的次数。
大家好,又见面了,我是你们的朋友全栈君。...运算技巧 a&(a-1) 除去a二进制中最后一位1 a XOR 0 = a a与0的异或还是a a XOR a = 0 a与a的异或为0 a XOR b XOR a = b 可用于去重...1 0 1 1 1 0 八、同或 相同得1;相异得0 A B F = AB + AB 0 0 1 0 1 0 1 0 0 1 1 1 首先记住与、或、非操作。...与非、或非只需要先按照与、或判断,再非一下。异或、与或关键词在于《异:不同》为1、《与:相同》为1。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
在 Redis 中,可以把 Bitmaps 想象成一个以比特位为单位的数组,数组的每个单元只能存储0和1,数组的下标在 Bitmaps 中叫做偏移量。...位图不是实际的数据类型,而是在 String 类型上定义的一组面向位的操作,将其视为位向量。由于字符串是二进制安全 blob,其最大长度为 512 MB,因此它们适合设置最多 2^32 个不同位。...请注意,一旦完成第一次分配,后续对同一键的 SETBIT 调用将不会产生分配开销。...和 end 以字节为单位BITCOUNT mykey 0 1BITOP在多个键(包含字符串值)之间执行按位运算并将结果存储在目标键中语法:#AND 与运算 OR 或运算 |# XOR 异或 ^#NOT...取反 ~BITOP destkey key [key ...]BITOP 命令支持四种按位运算:AND、OR、XOR 和 NOT,因此调用该命令的有效形式为
,并将结果保存到 destkey BITOP OR destkey key [key …] ,对一个或多个 key 求逻辑或,并将结果保存到 destkey BITOP XOR destkey key...[key …] ,对一个或多个 key 求逻辑异或,并将结果保存到 destkey BITOP NOT destkey key ,对给定 key 求逻辑非,并将结果保存到 destkey 除了 NOT...操作之外,其他操作都可以接受一个或多个 key 作为输入 当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0 空的 key 也被看作是包含 0 的字符串序列 已知a和b的二进制表示...not 0 ->1 not 1->0 bitop not anot a bitop not bnot b 相同为0,相异为1 XOR=》求逻辑异或 0 xor 0->0 1 xor...2).不适合使用Hash的情况 使用二进制位操作命令:因为Redis目前支持对字符串键进行SETBIT、GETBIT、BITOP等操作,若要使用这些操作,那么只能使用字符串键,虽然散列也能保存二进制数据
Redis的字符串是一个由字节组成的序列,采用预分配冗余空间的方式来减少内存的频繁分配,内部为当前字符串实际分配的空间capacity 一般要高于实际字符串长度len。...BITCOUNT是以字符为(Byte)单位,一个字符有8位bit 查找指定范围出现的第一个0或1(BITPOS) 查找指定范围出现的第一个0或1的bit位置 # bit查找的值 0 或者 1 [start...AND destkey key [key …],对一个或多个key求逻辑并,并将结果保存到destkey BITOP OR destkey key [key …],对一个或多个key求逻辑或,并将结果保存到...destkey BITOP XOR destkey key [key …],对一个或多个key求逻辑异或,并将结果保存到destkey BITOP NOT destkey key ,对给定key求逻辑非...,并将结果保存到destkey # 对每bit进行运算 # BITOP operation destkey key [key ...] > set key1 aa OK > set key2 bb OK
(AND、OR、XOR、NOT)和另一个字符串键的值: jedis.bitop(BitOP op, String destKey, String... srcKeys); 对字符串键的值进行位操作,并指定操作类型...(AND、OR、XOR、NOT)和位操作的结果保存的新键: jedis.bitop(BitOP op, String destKey, String... srcKeys); 对字符串键的值进行位操作...,并指定操作类型(AND、OR、XOR、NOT)和另一个字符串键的值,并返回操作结果的字符串表示: String result = jedis.bitop(BitOP op, String destKey...list操作 下面是使用Java实现Redis中所有List相关命令操作的示例代码: LPUSH命令:将一个或多个值插入到列表的头部 jedis.lpush("listKey", "value1", "...运算,并将结果保存到新的BitMap中 jedis.bitop(BitOP.OR, "result", "bitmap1", "bitmap2", "bitmap3"); 获取指定范围内值为1的位的位置
本文命令介绍部分只是列举了基本的命令,至于具体的使用示例,可以参考Redis官方文档:Redis命令大全 字符串类型 字符串是Redis中最基本的数据类型,它能够存储任何类型的字符串,包含二进制数据。...Java的i++运算,用法: INCR key INCRBY 增加指定的数字,仅仅对数字类型的键有用,相当于Java的i+=3,用法:INCRBY key increment,意思是key自增increment...offset value BITCOUNT 获取一个键值的一个范围内的二进制表示的1的个数,用法:BITCOUNT key [start end] BITOP 该命令可以对多个字符串类型键进行位运算,并将结果存储到指定的键中...,BITOP支持的运算包含:OR,AND,XOR,NOT,用法:BITOP OP desKey key1 key2 BITPOS 获取指定键的第一个位值为0或者1的位置,用法:BITPOS key 0/...,用法:ZCOUNT key min max,min和max的用法和5中的一样 ZREM 删除一个或多个元素,用法:ZREM key value1 [value2 ...]
但是当看到要求说要用 Redis 位运算的时候,我就在想,为啥呢,仔细想了一哈,发现如果用 Mysql 来实现的话虽然简单粗暴,但是也有弊端,比如我们想要做一些复杂的功能就不是太方便了,或者说不是太高性能了...准备 大家知道 Redis 的字符串数据都是以二进制的形式存放的,所以说 Redis 的 Bit 操作非常适合处理这个场景,因为 Bit 的值为 0 或 1,用户是否打卡也可以用 0 或 1 来表示,我们把签到的天数对应到每个字节上...3 ,1) 就可以实现签到功能了,这里的 offset 就是3,同理,不同的用户不同的日期,改变对应的值就好了。...求逻辑异或NOT : 对给定 key 求逻辑非 $redis->bitop('AND', 'threeAnd', 'login:20190311', 'login:20190312', 'login...是不是特别方便快捷的统计查询,哈哈, 结束语 从上面的例子中大家可以看到不管在存储上面还是在统计计算上面,位运算都比 mysql 的方式好太多。
最近在学习非关系型数据库redis,来总结一下redis常用的指令吧,比较简单,就当做自己敲打一遍加深一下印象吧。...偏移量 那么只对偏移量指定范围内的二进制进行统计 7)BITOP BITOP operation dest-key key-name [key-name…]—对一个或多个二进制位串执行包括并(and)、...或(or)、异或(XOR)、非(NOT)在内的任意一种按位运算的操作,并将计算得出的结果保存在dest-key键里面 二,列表 1)RPUSH RPUSH KEY-NAME value [value...—从散列里面获取一个或多个键得值 2)hmset key-name key value [key value …]—为散列里面得一个或多个键设置值 3)hdel hdel key-name key [key...…] —删除散列里面得一个或多个键值对,返回成功找到并删除键值对得数量 3)hlen hlen key-name —返回散列包含得键值对得数量 redis散列的高级特性 1)hexists hexists
可以删除一个或多个键,返回值是删除的键的个数 注意:不支持通配符删除 获得键值的数据类型 type key 返回值可能是 string(字符串类型...递增数字 incr key 当存储的字符串是整数形式时,redis提供了一个使用的命令 incr 作用是让当前的键值递增,并返回递增后的值 当要操作的键不存在时会默认键值为...(0 或 1),索引从 0 开始,如果需要获取的二进制位的索引超出了键值的二进制位的实际长度则默认位值是 0 setbit key offset value setbit...bittop 命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。...该命令支持的运算操作有 AND、 OR、XOR、 NOT, 如我们对bar 和 aar 进行 OR 运算操作: set foo1 bar
bitop可以有and、or、xor,即与、或、异或的位运算。 二、位数组的表示 redis使用字符串对象sds来表示位数组,因为其数据结构是二进制安全的。因此,其末尾也会用\0来表示结尾。...根据上述原理,可以创建一个表,表的键为某种排列的位数组,值是1的二进制位的数量。例如下图是以8位长度作为键的表。 ? 创建这个表后,则无需对位数组进行检查,只要查表就可以知道结果。...目前最好的算法是variable-precision SWAR,该算法通过一系列的位移和位运算操作,可以在常数时间内计算多个字节的汉明重量,并且不需要耗费额外的内存。...六、bitop实现 bitop接受选项and、or、xor、not,分别对应c语言中的&、|、^、~。 例如,键x、y分别保存的二进制位,如下图左右图所示。 ?...2)分别对两个数组的buf[0]~buf[2]进行&的计算,将结果分别保存在新的value中的buf[0]~buf[3]。 ? and、or、xor选项支持多个键,但是not只支持1个键的计算。
SETEX key seconds value 位运算 GETSET:设置指定键的字符串值,并获取之前的值。 GETSET key value SETBIT:设置指定位置的位值(0 或 1)。...BITCOUNT key [start end] BITOP:对多个键进行位运算,并将结果存储到指定的键中。 BITOP operation destkey key [key ......] - operation 可以是 AND(按位与)、OR(按位或)、XOR(按位异或)或 NOT(按位取反)。 - destkey 是存储结果的键。 - key 是参与位运算的键。...Redis 的散列类型与关系型数据库的表的字段不同,对每一个对象可以单独设置其字段。 优点:适合存储对象,可以方便地对对象的字段进行读写操作。 应用场景:存储对象、缓存、存储用户信息等。...Redis 的集合提供了高效的成员检查和集合操作,例如并集、交集和差集等。 优点:无序、不重复,支持高效的成员判断和集合运算。 应用场景:标签系统、好友关系、共同兴趣等。
:键剩余的过期时间 -1:键没有设置过期时间 -2:键不存在 迁移键 Move Dump + restore Migrate Move Move key db用redis库和库内部进行迁移...Host 目标 redis 的ip Port目标redis的端口 Key|" "迁移的键,可以是多个键 Destination-db目标redis的数据库的索引(索引就是数据库的编号0-15) Timeout...之间 没有 不支持 Migrate redis之间 有 支持 遍历键 Keys patten Keys * 192.168.1.10:6379> keys * 1) "c" 2) *user:...匹配1个字符 []匹配部分宇符[1,3]代表1和3 [1-10]代表1到10的任意数字 \x用来做转义 以j或r开头edis结尾的键 有3种情况使用keys 1、不对外提供服务的redis...Bitop是一个复合操作,他可以做多个bitmaps的and (交集),or併集),not (非),xor (异或)操作比ing 讲结果保存在destkey中 5、计算Bitmaps中第一直为targetBit
统计活跃用户这个案例非常经典,也是我当时学习redis时,接触到的第一个让我眼睛一亮的使用方式 场景 用户登录后需要记录,以便以后进行登录统计 统计需求主要有: (1)今天的登录用户数 (2)...3天内都登录过的用户 (3)7天内登录过的用户 常规解决方案 如果不用redis,通常做法是在用户登录时记录日志,或者在数据库中添加一条登录记录 然后按照需求进行定时统计 redis解决方案...redis的 bit 操作非常适合处理这个场景 因为bit的值为 0或1,用户是否登录也可以用 0或1 来表示 我们把每天的用户登录信息记录到一个key中,值中的每个offset的值就是用户登录的标识...bit 基本操作示例 (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
本文是Redis系列的第四篇文章,了解前面的文章有助于更好的理解本文: ---- 1.Linux上安装Redis 2.Redis中的五种数据类型简介 3.Redis字符串(STRING)介绍 ----...准备知识 在学习这几个命令之前,我们得先了解下redis中字符串的存储方式,redis中的字符串都是以二进制的方式进行存储的,比如说我执行如下命令: 127.0.0.1:6379> SET k1 a OK...这种统计方式最大的好处就是节省空间并且运算速度快。每天占用一个bit,一年也就365个bit,10年也就10*365个bit,也就是456个字节,对于这么大的数据,bit的操作速度非常快。...BITOP BITOP可以对一个或者多个二进制位串执行并(AND)、或(OR)、异或(XOR)以及非(NOT)运算,如下:a对应的ASCII码转为二进制是01100001,c对应的二进制位串是01100011..."\x02" 另外,BITOP也可以执行NOT运算,但是注意参数个数,如下: 127.0.0.1:6379> BITOP not k3 k4 (integer) 1 这里会对k4的二进制位串取反,将取反结果交给
Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为string(字符串),list(列表),set(集合),hash(散列),zset(有序集合),下面将分别对这5种数据类型的控制命令进行总结...BITOP:bitop operation dest-key key1 [key2…] ——对一个或多个二进制位串执行包括并、或、异或、非在内的任意一种位运算操作 (2)示例 redis 127.0.0.1...如果对一个不存在的键或者一个保存了空串的键执行自增或自减操作,那么Redis在执行操作时会将这个键的值当作0来处理 b....有序集合命令 和散列存储着键与值之间的映射类似,有序集合也存储着成员与分值之间的映射,并且提供了分值处理命令,以及和根据分值大小有序地获取或扫描成员和分值的命令 (1)常有有序集合命令 ZADD:...…] [WEIGHTS weight [weight…]] [AGGREGATE SUM|MIN|MAX] ——对给定的有序集合执行类似集合的并集运算 (4)示例 redis 127.0.0.1:6379
: # BitMap 间的运算 # operations 位移操作符,枚举值 AND 与运算 & OR 或运算 | XOR 异或 ^ NOT 取反 ~ # result 计算的结果,会存储在该...key 中 # key1 … keyn 参与运算的 key,可以有多个,空格分割,not 运算只能一个 key # 当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0。...签到统计 在签到打卡的场景中,我们只用记录签到(1)或未签到(0),所以它就是非常典型的二值状态。...Redis 提供了 BITOP operation destkey key [key ...] 这个指令用于对一个或者多个 key 的 Bitmap 进行位元操作。...当 BITOP 处理不同长度的字符串时,较短的那个字符串所缺少的部分会被看作 0 。空的 key 也被看作是包含 0 的字符串序列。
位图数据结构其实并不是一个全新的玩意,我们可以简单的认为就是个数组,只是里面的内容只能为0或1而已(二进制位数组)。...2.命令实战 Redis提供了SETBIT、GETBIT、BITCOUNT、BITOP四个常用命令用于处理二进制位数组。...BITCOUNT:统计位数组中值为1的二进制位数量。 BITOP:对多个位数组进行按位与、或、异或运算。...根据这个原理,我们可以创建一个表,表的键为某种排列的位数组,而表的值则是相应位数组中值为1的二进制位的数量。...不过准确的描述应该是根据不同的type确定对应的数据结构,而type的确定就是比大小啦~ static inline char sdsReqType(size_t string_size) {
因为字符串是二进制安全的块,他们的最大长度是512M,最适合设置成2^32个不同字节。...每个位只能存储0或1。...获取Bitmaps中某个偏移量的值 获取键的第offset位的值(从0开始算) 3、bitcount 统计字符串被设置为1的bit数。...[key…] bitop是一个复合操作, 它可以做多个Bitmaps的and(交集) 、 or(并集) 、 not(非) 、 xor(异或) 操作并将结果保存在destkey中。...在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数。这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比。
领取专属 10元无门槛券
手把手带您无忧上云