directory search
Cluster cluster addslots(集群 槽位) cluster count failure reports(集群计数失败报告) cluster countkeysinslot cluster delslots cluster failover cluster forget cluster getkeysinslot cluster info cluster keyslot(集群键槽) cluster meet cluster nodes(集群节点) cluster replicate(集群复制) cluster reset(集群重置) cluster saveconfig cluster set config epoch cluster setslot cluster slaves cluster slots readonly readwrite Connection auth echo ping quit select swapdb Geo geoadd geodist geohash geopos georadius georadiusbymember Hashes hdel hexists hget hgetall hincrby hincrbyfloat hkeys hlen hmget hmset hscan hset hsetnx hstrlen hvals HyperLogLog pfadd pfcount pfmerge Keys del dump exists expire expireat keys migrate move object persist pexpire pexpireat pttl randomkey rename renamenx restore scan sort touch ttl type unlink wait Lists blpop brpop brpoplpush lindex linsert llen lpop lpush lpushx lrange lrem lset ltrim rpop rpoplpush rpush rpushx Pub/Sub psubscribe publish pubsub punsubscribe subscribe unsubscribe Scripting eval evalsha script debug script exists script flush script kill script load Server bgrewriteaof bgsave client getname client kill client list client pause client reply client setname command command count command getkeys command info config get config resetstat config rewrite config set dbsize debug object debug segfault flushall flushdb info lastsave monitor role save shutdown slaveof slowlog time Sets sadd scard sdiff sdiffstore sinter sinterstore sismember smembers smove spop srandmember srem sscan sunion sunionstore Sorted Sets zadd zcard zcount zincrby zinterstore zlexcount zrange zrangebylex zrangebyscore zrank zrem zremrangebylex zremrangebyrank zremrangebyscore zrevrange zrevrangebylex zrevrangebyscore zrevrank zscan zscore zunionstore Strings append bitcount bitfield bitop bitpos decr decrby get getbit getrange getset incr incrby incrbyfloat mget mset msetnx psetex set setbit setex setnx setrange strlen Transactions discard exec multi unwatch watch
characters

BITOP operation destkey key [key ...]

自2.6.0起可用。

时间复杂度: O(N)

在多个键(包含字符串值)之间执行按位操作并将结果存储在目标键中。

BITOP 命令支持四个按位运算:ANDORXORNOT,因此调用该命令的有效形式为:

  • 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

正如你可以看到,NOT 是特殊的,因为它只需要一个输入键,因为它执行比特反转,所以它只作为一元运算符有意义。

操作结果始终存储在destkey

处理不同长度的字符串

当在具有不同长度的字符串之间执行操作时,比集合中最长的字符串短的所有字符串被视为零填充到最长字符串的长度。

对于不存在的密钥也是如此,这些密钥被视为零字节流直到最长字符串的长度。

返回值

整数回复

存储在目标密钥中的字符串的大小,即等于最长输入字符串的大小。

例子

redis>  SET key1 "foobar" "OK" redis>  SET key2 "abcdef" "OK" redis>  BITOP AND dest key1 key2 (integer) 6 redis>  GET dest "`bc`ab"

模式:使用位图的实时指标

BITOP 对 BITCOUNT 命令文档中记录的模式有很好的补充。可以组合不同的位图以获得执行总体计数操作的目标位图。

查看名为“ 使用Redis位图的快速简单实时指标 ”的文章,了解一些有趣的用例。

性能考虑

BITOP 是一个可能很慢的命令,因为它在O(N)时间运行。对长输入字符串运行时应小心。

对于涉及大量输入的实时指标和统计信息,一种好的方法是使用一个从属(禁用只读选项)的位置执行位操作,以避免阻塞主实例。

Previous article: Next article: