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
Java 如何增加redis排序集的值_Java_Redis_Lettuce - Fatal编程技术网

Java 如何增加redis排序集的值

Java 如何增加redis排序集的值,java,redis,lettuce,Java,Redis,Lettuce,TL;DR我正在寻找一种按分钟存储、增加和检索事件计数范围的方法 我正在寻找在redis中创建递增时间序列的解决方案。我正在寻找存储计数到分钟。我的目标是能够查找时间范围并获得值。因此,对于Instance,如果特定钥匙每分钟发生30次事件。我想做一些类似zrange的事情,并获取它们的键值。我也希望使用类似zincrby的东西来增加价值。我当然看过一个排序集,它看起来像是一个完美的匹配,直到我意识到我只能对分数而不是值进行范围扫描。最佳解决方案是使用分钟数作为分数,然后使用排序集中的值作为该分

TL;DR我正在寻找一种按分钟存储、增加和检索事件计数范围的方法

我正在寻找在redis中创建递增时间序列的解决方案。我正在寻找存储计数到分钟。我的目标是能够查找时间范围并获得值。因此,对于Instance,如果特定钥匙每分钟发生30次事件。我想做一些类似zrange的事情,并获取它们的键值。我也希望使用类似zincrby的东西来增加价值。我当然看过一个排序集,它看起来像是一个完美的匹配,直到我意识到我只能对分数而不是值进行范围扫描。最佳解决方案是使用分钟数作为分数,然后使用排序集中的值作为该分钟的事件数。我遇到的问题是zincrby只会增加分数,而不会增加值。我无法找到一种方法来原子地增加值。我还研究了一个hashmap,使用当前分钟作为键,使用事件计数作为值。我可以使用hincrby增加值,但问题是它不支持获取一系列键


任何帮助都将不胜感激。

你知道,对,一个问题已经有了答案。您已经谈到了redis解决问题的方法:

使用-键作为时间,值作为计数器。 使用-键作为时间,值作为计数器。 使用-键名称作为时间,值作为计数器。 为什么只有这种情况?因为只有这种结构,并且有原子方法来增加值

实际上:

您应该正确选择数据结构。 解决数据选择的问题。 第一个问题的答案是内存和性能之间的折衷。从您的问题来看,如果按排序集排序不是最佳解决方案,则不需要任何类型-消耗大量内存,时间复杂度是OlogN,而不是O1。因此,我们应该在哈希和字符串键之间进行选择。请看一下redis中的右内存优化——根据这一点,我认为您应该使用哈希作为解决方案的数据类型

第二个问题对于任何类型的数据结构都很常见,因为所有类型的数据结构都不包含按名称选择功能或类似功能。我们可以使用或来解决这个问题。在任何情况下,此解决方案都具有时间复杂性

以下是我不是Java程序员的示例,很抱歉可能出现错误:

int fromMinute = 1;
int toMinute = 10;

List<String> list = new ArrayList<String>();
for(int i = fromMinute ; i < toMinute ; i++) {
    list.add(i.toString());
}

Jedis jedis = new Jedis("localhost");
List<String> values = jedis.hmget("your_set_name", list);

此解决方案是原子的、快速的,在redis中具有时间复杂性,并且尽可能少地消耗内存

谢谢你提供的信息!!我几乎得出了相同的结论,但是我没有考虑得到钥匙清单的hmget。我看着hscan,非常讨厌这样做。我认为这是一个很好的解决方案!!我还发现了一个node项目,它有一个我将要模仿的非常类似的解决方案。它使用hashmaps创建时间序列,时间序列依赖于分钟/小时/秒等粒度。忘了考虑节点库