redis ZINTERSTORE详解
Posted zxqblogrecord
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis ZINTERSTORE详解相关的知识,希望对你有一定的参考价值。
command 语法:
ZINTERSTORE destination numkeys key [key …] [WEIGHTS weight [weight …]] [AGGREGATE SUM|MIN|MAX]
command 意义:
ZINTERSTORE ~ 命令关键字
destination ~指定结果集保存的集合key
numkeys key [key …] ~ numkeys 指定有多少个集合参与交集运算, key 指定参与交集运算的集合的key
[WEIGHTS weight [weight …]] ~ 指定参与交集运算各集合score的权重参数
[AGGREGATE SUM|MIN|MAX] ~ 指定交集中元素的score的取值方式,例如:sum 等于各集合中该元素的score乘以权重求和
注:
1 默认情况下:权重皆为1 ,取值方式为 sum
2 若指定的destination已经存在,则结果集会覆盖这个key ,无论之前这个key是什么类型,是否包含元素,使用时务必注意
详细解释:
Redis Zinterstore 命令计算给定的一个或多个有序集的交集,其中给定 key 的数量必须以 numkeys 参数指定,并将该交集(结果集)储存到 destination 。结果集中元素score为 取值方式计算各集合中该元素score乘以权重结果
#新增一个有序集合 127.0.0.1:6379> zadd zkey1 1 one 2 two 3 three 4 foure 5 five (integer) 5 127.0.0.1:6379> zrange zkey1 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" 5) "three" 6) "3" 7) "foure" 8) "4" 9) "five" 10) "5" #新增一个有序集合 127.0.0.1:6379> zadd zkey2 10 one 20 two 60 six 70 seven (integer) 4 127.0.0.1:6379> zrange zkey2 0 -1 withscores 1) "one" 2) "10" 3) "two" 4) "20" 5) "six" 6) "60" 7) "seven" 8) "70" #取zkey1 和zkey2 2个有序集合的交集 保存至有序集合zkey3(zkey3若不存在则新建,若存在则覆盖) 127.0.0.1:6379> zinterstore zkey3 2 zkey1 zkey2 (integer) 2 127.0.0.1:6379> zrange zkey3 0 -1 withscores 1) "one" 2) "11" 3) "two" 4) "22" #取zkey1 和zkey2 2个有序集合的交集 保存至有序集合zkey3,权重配置为 10 和 1(zkey3若不存在则新建,若存在则覆盖) # zkey3 score = (zkey1 score)*10 + (zkey2 score)*1 # 例如 one score: 20 = 1*10+10*1 127.0.0.1:6379> zinterstore zkey3 2 zkey1 zkey2 weights 10 1 (integer) 2 127.0.0.1:6379> zrange zkey3 0 -1 withscores 1) "one" 2) "20" 3) "two" 4) "40" # 没有指定numberkeys 127.0.0.1:6379> zinterstore zkey3 zkey1 zkey2 aggregate min (error) ERR value is not an integer or out of range #取zkey1 和zkey2 2个有序集合的交集 保存至有序集合zkey3,取值方式为min(zkey3若不存在则新建,若存在则覆盖) # zkey3 score = min( (zkey1 score)*1 , (zkey2 score)*1 ) # 例如 one score:1 = min(1,10) 127.0.0.1:6379> zinterstore zkey3 2 zkey1 zkey2 aggregate min (integer) 2 127.0.0.1:6379> zrange zkey3 0 -1 withscores 1) "one" 2) "1" 3) "two" 4) "2" #测试 保存结果的key已经存在 实际覆盖这个key #新增一个无序集合 setkey1 127.0.0.1:6379> sadd setkey1 1 (integer) 1 127.0.0.1:6379> smembers setkey1 1) "1" #取zkey1 和zkey2 2个有序集合的交集 保存至无序结合setkey1中 127.0.0.1:6379> zinterstore setkey1 2 zkey1 zkey2 (integer) 2 #setkey1 的类型从无序集合变为有序集合了 原有元素已经不存在了 127.0.0.1:6379> type setkey1 zset 127.0.0.1:6379> smembers setkey1 (error) WRONGTYPE Operation against a key holding the wrong kind of value 127.0.0.1:6379> zrange setkey1 0 -1 withscores 1) "one" 2) "11" 3) "two" 4) "22" 127.0.0.1:6379>
---------------------
原文:https://blog.csdn.net/qq_37586182/article/details/80240728
以上是关于redis ZINTERSTORE详解的主要内容,如果未能解决你的问题,请参考以下文章
当两个输入集之一是正常集时,zinterstore 会更快/更慢吗?