【问题标题】:Jedis as message queue performanceJedis 作为消息队列的性能
【发布时间】:2017-01-03 06:00:12
【问题描述】:

我在 Redis 队列上使用 Java 库 Jedis,我将其用作生产者/消费者队列。它易于设置并且运行良好。

下面的消费者代码

List<String> messages = jedis.blpop(0, redisQueueName);
String message = messages.get(1);
//do some stuff

我正在寻找是否可以提高性能,因为我有大量项目位于 Redis 队列中等待提取。我已经为我的自定义处理代码计时,它不会花费太长时间(20000 纳秒)。

最好的做法是一次从 Redis 中提取多个项目并批量处理它们吗?或者我是否更好地考虑调整 Redis 服务器以获得更好的性能?

【问题讨论】:

  • 您的问题可能确实在 Redis 的 IO 上,而不是在处理上 - 我会分批抓取它们;如果没有任何类型的交易,您无论如何都会丢失消息;您使用 Redis 的事实表明这对您来说不是问题。

标签: java performance redis jedis


【解决方案1】:

是的,批量拉取确实是最佳做法。您将避免网络往返。

另一件事是如果队列快速增长而超出特定范围并且您希望控制队列大小(内存大小),则修剪队列。有时您可能不需要执行队列中的每个条目,而是随着队列大小的增大而跳过一些条目。

如果要保留第一个输入的元素,即, 仅保留前 100 个元素

Ltrim queue 0 100 

要保留最后 100 个元素,您可以这样做

Ltrim queue -1 100

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2015-02-01
    • 2011-10-11
    • 2022-06-10
    • 2016-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2018-09-24
    • 2011-02-18
    相关资源
    最近更新 更多