Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按值范围设置的筛选器Redis_Redis - Fatal编程技术网

按值范围设置的筛选器Redis

按值范围设置的筛选器Redis,redis,Redis,我有一套像这样的(除了它有大约8000件): 我需要能够根据值的范围过滤这些,例如,我可以说“给我所有值在5.50和24.36之间的条目”或“给我所有值在47.45和301.8之间的条目”。对可传递到此筛选器的数字没有任何限制 现在,我知道可以为每个值创建一个集合,但我不认为这是有效的,因为几乎所有大约8000个条目都有唯一的值 如果我们可以预定义范围(例如,0-10、10-20等),那么我可以为每个范围创建集合,其中包含属于该范围的键。但遗憾的是,情况并非如此,我需要在保持性能稳定的同时,尽可

我有一套像这样的(除了它有大约8000件):

我需要能够根据值的范围过滤这些,例如,我可以说“给我所有值在5.50和24.36之间的条目”或“给我所有值在47.45和301.8之间的条目”。对可传递到此筛选器的数字没有任何限制

现在,我知道可以为每个值创建一个集合,但我不认为这是有效的,因为几乎所有大约8000个条目都有唯一的值

如果我们可以预定义范围(例如,0-10、10-20等),那么我可以为每个范围创建集合,其中包含属于该范围的键。但遗憾的是,情况并非如此,我需要在保持性能稳定的同时,尽可能灵活地进行调整


我意识到这对于键值存储来说可能很棘手,但可能有人有解决方案?

你做对了-在键值模型中按值搜索需要为每个值(或范围)连接值键映射。这通常被称为索引(与其他数据库的做法不同)


作为替代方案,您可以考虑使用实际上就是为此而构建的(除其他外)。它是一个具有Apache+CC许可证的Redis模块。

如果您愿意创建另一个集合,可以使用排序集(ZSET)将值作为分数,并将条目本身作为成员,如下所示:

127.0.0.1:6379> ZADD stocks 9.17 '{"id":563244,"stock_id":693,"value":"9.17","symbol":"BCS"}'
(integer) 1
127.0.0.1:6379> ZADD stocks 21.09 '{"id":565527,"stock_id":10093,"value":"21.09","symbol":"GDXS"}' 91.52 '{"id":564311,"stock_id":4241,"value":"91.52","symbol":"NDAQ"}' 127.60 '{"id":565269,"stock_id":8883,"value":"127.60","symbol":"SAA"}'
(integer) 3
然后只拉那些只有你需要的分数的成员:

127.0.0.1:6379> ZRANGEBYSCORE stocks 20 100
1) "{\"id\":565527,\"stock_id\":10093,\"value\":\"21.09\",\"symbol\":\"GDXS\"}"
2) "{\"id\":564311,\"stock_id\":4241,\"value\":\"91.52\",\"symbol\":\"NDAQ\"}"

我想我得做点像这样的事情,看看表演是否受到了太多的影响!我不认为性能是ZSET的问题,而是内存的问题。
127.0.0.1:6379> ZRANGEBYSCORE stocks 20 100
1) "{\"id\":565527,\"stock_id\":10093,\"value\":\"21.09\",\"symbol\":\"GDXS\"}"
2) "{\"id\":564311,\"stock_id\":4241,\"value\":\"91.52\",\"symbol\":\"NDAQ\"}"