我们在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并且没有下降。似乎没有影响任何东西,但仍然想知道它是如何高,如果这影响性能。
所以我的问题是:
答案 0 :(得分:3)
Jedis是一个小而精美的图书馆,如果你想“只是”一些Redis。它的速度非常快,因为它只是它的工作。 Jedis的可伸缩性受到线程/连接的限制,并且连接不是线程安全的。您可以使用连接池,我坚信,这有助于解决您的问题。
每次调用时,上面的代码都会连接/断开与Redis的连接。合并可能会有所帮助。 jedis使用commons-pool2,这是一个非常好的连接池实现,但与其他框架相比速度较慢。
您可以自己实现连接池,以改善高连接数问题。
你问过生菜:有了生菜,你只需要一个连接,因为生菜连接是线程安全的(只要你不使用阻塞操作[BLPOP
]或事务[EXEC
/ { {1}}])。生菜略慢于jedis,但提供:
莴苣不提供从属的读取。 ElastiCache也没有故障转移/服务发现(只有Redis Sentinel支持故障转移)。
缺点可能是生菜的命令模式,因为生菜为您发出的每个命令创建命令。根据使用情况,命令会占用大部分内存。但是,这取决于你的观点。
HTH,马克
答案 1 :(得分:0)
尝试Redisson它支持AWS Elasticache服务,并为Redis提供连接池和最方便的Java API。