Jedis - 高性能servlet - 设置

时间:2015-09-15 10:46:24

标签: java redis elastic-beanstalk jedis amazon-elasticache

我们在Elastic Beanstalk上运行一个servlet,我们连接到ElastiCache,它运行得相当好,但现在我们在高峰时段获得了高CPU负载(50%),并且正在考虑优化它。

目前我们正在使用这样的Jedis:

try (Jedis jedis = new Jedis(Global.CLUSTER_ENDPOINT, 6379, 10000);) {              
    jedis.hset(f.dayOfFile, "content", f.xmlFile);
}

我们遇到的一个问题是活跃连接的数量突然上升到8400并且没有下降。似乎没有影响任何东西,但仍然想知道它是如何高,如果这影响性能。

所以我的问题是:

  1. 我们应该使用另一个像生菜(https://github.com/mp911de/lettuce)这样的图书馆吗?
  2. 或者我们应该使用连接池吗?我们每天都有数百万的请求,所以有点害怕切换到连接池,如果这会引入池中的最大连接等其他问题?
  3. 或者还有什么我们应该调整的吗?

2 个答案:

答案 0 :(得分:3)

Jedis是一个小而精美的图书馆,如果你想“只是”一些Redis。它的速度非常快,因为它只是它的工作。 Jedis的可伸缩性受到线程/连接的限制,并且连接不是线程安全的。您可以使用连接池,我坚信,这有助于解决您的问题。

每次调用时,上面的代码都会连接/断开与Redis的连接。合并可能会有所帮助。 jedis使用commons-pool2,这是一个非常好的连接池实现,但与其他框架相比速度较慢。

您可以自己实现连接池,以改善高连接数问题。

你问过生菜:有了生菜,你只需要一个连接,因为生菜连接是线程安全的(只要你不使用阻塞操作[BLPOP]或事务[EXEC / { {1}}])。生菜略慢于jedis,但提供:

  • 线程安全性
  • 连接断开时自动重新连接和命令缓冲
  • 异步API
使用Redis Standalone(或Redis Master / Slave)时,

莴苣不提供从属的读取。 ElastiCache也没有故障转移/服务发现(只有Redis Sentinel支持故障转移)。

缺点可能是生菜的命令模式,因为生菜为您发出的每个命令创建命令。根据使用情况,命令会占用大部分内存。但是,这取决于你的观点。

HTH,马克

答案 1 :(得分:0)

尝试Redisson它支持AWS Elasticache服务,并为Redis提供连接池和最方便的Java API。