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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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 从给定的1开始获取哈希集_Redis - Fatal编程技术网

Redis 从给定的1开始获取哈希集

Redis 从给定的1开始获取哈希集,redis,Redis,我使用以下键存储哈希集:度量:,f.e.度量:1482236501103,然后在稍后的时间点,我希望传递某个时间戳,并获取从给定时间戳到结束的所有记录。但是由于Redis不会对记录进行排序,所以我能想到的唯一解决方案是检查每个键——其名称中的时间戳是否比给定的时间戳“大” 有更好的方法吗?事实上,有更好的方法服务于这种类型的查询 将测量值存储在一个已排序的集合中-将时间戳保留在分数中,元素本身就是测量值。因为集合中的成员必须是唯一的,但我假设可以重复测量值,而不是按原样存储值,并在其前面加上时间

我使用以下键存储哈希集:
度量:
,f.e.
度量:1482236501103
,然后在稍后的时间点,我希望传递某个时间戳,并获取从给定时间戳到结束的所有记录。但是由于Redis不会对记录进行排序,所以我能想到的唯一解决方案是检查每个键——其名称中的时间戳是否比给定的时间戳“大”


有更好的方法吗?

事实上,有更好的方法服务于这种类型的查询

将测量值存储在一个已排序的集合中-将时间戳保留在分数中,元素本身就是测量值。因为集合中的成员必须是唯一的,但我假设可以重复测量值,而不是按原样存储值,并在其前面加上时间戳以使成员唯一。这意味着,如果在时间123测量值987,将使用以下命令将其存储在Redis中:

ZADD measurements 123 123:987

要执行查询,请使用并处理客户端应用程序中的回复,以从连接的时间戳:value成员中提取值。

我做了类似于@Itamar Haber建议的操作。我确实使用了
排序集
,并将
时间戳
用作
分数
,但由于我存储的值是字符串化的JSON对象,我只是将时间戳作为另一个属性添加到对象中(以使值唯一)


此外,为了能够获取从给定时间戳到最后一条记录的所有记录,我添加了一个键
“measurement:last”
,该键将只保存排序集中最后一条输入记录的时间戳。这样我就可以使用
ZRANGEBYSCORE
并将给定的时间戳设置为
start
,最后一个时间戳设置为
end
,听起来不错:)