当前位置: 首页 > 面试题库 >

如何获得排序集上的DIFF

景轶
2023-03-14
问题内容

如何从排序集中获得最加权的元素,但不包括在另一个集合(或列表或哈希)中找到的那些元素。

>zadd all 1 one
>zadd all 2 two
>zadd all 3 three
>sadd disabled 2
>sdiff all disabled

(error) WRONGTYPE Operation against a key holding the wrong kind of value

我唯一的选择是一对一地从排序集中获取元素并与“禁用”项目列表进行比较吗?由于与服务器的事务如此之多,这不会很慢吗?

这里的方法是什么?


问题答案:

注意:我认为您的意思是 sadd disabled two

如您所知,SDIFF它不能对已排序的集合进行操作-这是因为定义已排序的集合之间的差异并不容易。

您可以做的是首先使用ZUNIONSTORE创建一个临时集,并将相交的得分设置为0。然后执行一个排除0的范围,例如:

127.0.0.1:6379> ZADD all 1 one 2 two 3 three
(integer) 3
127.0.0.1:6379> SADD disabled two
(integer) 1
127.0.0.1:6379> ZUNIONSTORE tmp 2 all disabled WEIGHTS 1 0 AGGREGATE MIN
(integer) 3
127.0.0.1:6379> ZREVRANGEBYSCORE tmp +inf 1 WITHSCORES
1) "three"
2) "3"
3) "one"
4) "1"


 类似资料:
  • 问题内容: 这仅给我一行(第一行): 但是,我想要最近的日期val。我可以这样写第一行: 但是,当我尝试混合两个部分胜利时,它不起作用-显然,“仅选择第一行”逻辑 在 order by 之前 触发,然后order by随后被忽略。 问题答案: 它讨论了如何在oracle数据库上实现MySQL限制,该限制由您的标签判断并发布,即您正在使用的内容。 相关部分是:

  • 问题内容: 下面的代码应在上周五的16:00:00返回。但它返回上周的星期五。如何解决? 更新。我现在使用以下方法-最好的方法吗? Upd2。仅举一个例子。假设今天是 2012年10月5日 。如果当前时间等于或小于 16:00 ,则应返回 2012年9月28日 ,否则返回 2012 年 10月5日 。 问题答案: 与链接的问题一样,您需要使用对象而不是。要获得最终结果,可以使用:

  • 问题内容: 如何从SELECT语句的上一个结果行中获取值 如果我们有一个名为cardevent的表,并且有[ID(int),Value(Money)]行,并且其中有一些行,例如 很快… 如何进行一个查询,以获取每个行的ID,值和前一个行值,数据在其中显示如下 很快。 那么,有人可以帮助我获得针对此类问题的最佳解决方案吗? 需要查询帮助 问题答案: 您将不得不将表与自身连接,我不确定这是否是100%

  • 问题内容: 我在Redis商店中使用type。我为每个用户创建一个自己的 KEY 并将数据放在此处: KEY 示例 : 我想从Redis中为用户键选择数据:1、2、3,并按得分(时间戳)进行排序。 如果只是简单地看问题,我需要跨时从任何KEY中选择一个数据,然后将按分数排序的所有结果组合在一起。 问题答案: 有两种方法可以执行此操作,但是正确的方法取决于您要执行的操作。例如: 您可以在代码中为每个

  • 问题内容: 我知道KEYS命令,但这仅返回键(我猜所有的字符串类型都是String),并且显然不认为集合是键。 是否有用于获取数据库中所有集合的命令?其他数据类型(哈希,列表,排序集)又如何呢? http://redis.io/topics/data-types 问题答案: 我知道KEYS命令,但这仅返回键(我猜所有的字符串类型都是String),并且显然不认为集合是键。 不管您的密钥是哪种数据类

  • 我有一个名为product的MongoDB集合,其中包含以下文档,如下所示。 我想查询收款情况,只退回价格最低的单据,例如: 但当我运行聚合查询时: 它只返回一个文档。