作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如何查询
数据
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/
我是一名优秀的程序员,十分优秀!