redis如何在1个查询中组合多个命令

标签 redis node-redis

如何查询

  • 限量版红色法拉利
  • topSpeed 在 200 到 210 之间并且
  • 价格在 190 到 205 之间

数据

HMSET cars:1 make ferrari Price 199 limited yes color red topSpeed 202
HMSET cars:2 make porsche Price 555 limited no color yellow topSpeed 500

SADD make:ferrari 1
SADD color:red 1
SADD limited:yes 1
ZADD Price 199 1
ZADD topSpeed 202 1

SADD make:porsche 2
SADD color:yellow 2
SADD limited:no 2
ZADD Price 555 2
ZADD topSpeed 500 2

我试过但不知道如何为价格topSpeed添加多个范围 两者都是

multi.ZINTERSTORE('tempTom',4,
'color:red',
'make:ferrari',
'limited:yes',
'topSpeed'
);

multi.ZRANGEBYSCORE('tempTom' , 202 ,205) //range for topSpeed

//so how to add range for Price also ?

输出

[1,[]]

我做错了什么,如何用多个命令1个接一个地查询?

最佳答案

据我所知——这在 Redis 中几乎不可能用 1 个查询来完成。您正在尝试将键值对存储用作关系数据库。在 Redis 中有一种方法可以做到这一点,但有 2 个查询。但是,您可以将其包装为 MULTI/EXEC 中的单个事务,从而有效地使其成为 1 个查询。

例如:

再创建 2 组,一组用于 topSpeed,另一组用于 price。然后只需在这两者之间执行 SINTER(第一个查询)。然后使用该结果查询您的 car(第二个查询)。

解释:

# Inserting cars top speed
ZADD car:top-speed:210 "ferrari"
ZADD car:top-speed:300 "porsche"

# Inserting cars price (e.g. both cars have the same price)
ZADD car:price:190 "ferrari" "porsche"

# Using SINTER to get all cars with top speed of 210 and a price of 190
SINTER car:top-speed:210 car:price:300 // output "ferrari"

使用输出查询您的 car 集并获取所有其他详细信息(不要忘记 MULTI/EXEC)。

您可以通过简单地添加更多集并对所有集执行交集来添加更多“过滤器”。但是,无论何时添加新车,都必须填充所有这些集合。但这在 Redis 中是正常的,不会遇到大的性能问题。你可以查看here如果我的解释不清楚,再举一个类似的例子。

希望对你有帮助

关于redis如何在1个查询中组合多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55253253/

相关文章:

javascript - 登录系统 - Node.js 和 Redis

Redis messagebus 与 d-bus : what is happening at a low level? 基本上是同一件事?

node.js - 在 NodeJs 中合并一个非常大的列表的最佳方法是什么?

java - 无法序列化 session 的 session 属性 SPRING_SECURITY_CONTEXT

javascript - Nodejs和redis结构化数据

javascript - Redis 队列将列表中的项目存储为 [object Object]

javascript - 使用 Redis 扩展 Socket.IO,然后扩展 Redis 本身

node.js - 带有 nodeBB redis 的 Docker 配置不正确?

authentication - 经过身份验证的 ServiceStack.Redis.PooledRedisClientsManager

node.js - 有没有可能在redis中对 key 类型进行分类?