Java:我可以使用Redis db创建优先级队列并根据数据集中键的值设置优先级吗

标签 java redis queue

我是 Redis 新手。我想通过 Java 客户端在 Redis 中使用优先级队列。我将有一组键值对。并将其用作优先级队列。

数据集包含键及其对应的值。例如 [a:1,b:1,c:1]。值字段将表示键在数据集中出现的次数。如果将另一个键“a”插入到数据集中,则它变为 [a:2,b:1,c:1]。

这里是优先级。集合中出现的大多数键将具有最高优先级,在示例中为 [a],并且它应该位于队列的顶部。所以当我弹出队列时,优先级最高的元素应该弹出。

此外,如果数据集看起来像这样 [a:2,b:2,c:2],那么我想随机选择一个从队列中弹出。

由于我的数据集是键值对,所以我想使用 Redis [你可能会建议一个更好的]。

最佳答案

应该可以通过 Redis 排序集和 Lua 脚本来实现。排序集是按分数排序的元素集,但分数可以动态更新。更新排序集分数的一种方法是通过 ZINCRBY 增加其范围,这对应于您尝试执行的操作 AFAIK。该元素将根据增加的分数自动移动到正确的位置。然后通过使用其他排序集命令,您可以通过使用元素来模拟从排序集中弹出,如果这是您想要的语义的话。

关于Java:我可以使用Redis db创建优先级队列并根据数据集中键的值设置优先级吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555663/

相关文章:

java - java中哪个线程安全队列效率更高

java - 如果一个方法是同步的,那么被调用的方法是否也必须同步?

ruby-on-rails - 如何正确使用/插入Redis与Rails?

c# - 在 PROD 环境下使用 Redis Win64 端口

java - Redis key 命令未显示所有 key

c++ - 增加队列大小并找到最短队列

python - 在不同模块中运行的线程之间共享队列

java - Google Play 短信和通话权限

java - Apache HTTP 客户端或 URLConnection

java - 如何在 Visual Studio Code 中启用 Java 断言