我是 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/