Performance 欺骗+;Memcached编解码器性能差
我在欺骗应用程序中使用memcached编解码器。但是性能非常差,比使用SpymeCached客户端差得多。我用spymemached得到了8k请求/秒,用finagle的memcached编解码器得到了10个请求/秒。memcached也在我的机器上运行。我错过什么了吗? 压力测试期间的错误示例:Performance 欺骗+;Memcached编解码器性能差,performance,finagle,Performance,Finagle,我在欺骗应用程序中使用memcached编解码器。但是性能非常差,比使用SpymeCached客户端差得多。我用spymemached得到了8k请求/秒,用finagle的memcached编解码器得到了10个请求/秒。memcached也在我的机器上运行。我错过什么了吗? 压力测试期间的错误示例: Mar 05, 2014 10:22:10 AM com.twitter.finagle.builder.SourceTrackingMonitor handle SEVERE: A server
Mar 05, 2014 10:22:10 AM com.twitter.finagle.builder.SourceTrackingMonitor handle
SEVERE: A server service httpserver threw an exception
com.twitter.finagle.ChannelWriteException: org.jboss.netty.channel.ConnectTimeoutException: connection timed out: localhost/127.0.0.1:11211
at com.twitter.finagle.NoStacktrace(Unknown Source)
Caused by: org.jboss.netty.channel.ConnectTimeoutException: connection timed out: localhost/127.0.0.1:11211
at org.jboss.netty.channel.socket.nio.NioClientBoss.processConnectTimeout(NioClientBoss.java:137)
at org.jboss.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:83)
at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
客户端的配置方式:
def client = Client( ClientBuilder()
.hosts(parseHosts())
.hostConnectionLimit(10)
.codec(Memcached())
.retries(2)
.daemon(true)
.build() )
一个简单的get操作:
def getUserTries(username: String): Future[Int] = {
client.get(s"${username}_tries") flatMap { v => v match {
case Some(c:ChannelBuffer) => Future.value( UserCache.fromChannelBuffer(c).toInt )
case _ => Future.value(0)
}
}
def saveUserTries(username: String, tries: Int): Future[Unit] = {
client.set( s"${username}_tries", UserCache.toChannelBuffer(tries.toString) )
}
和一个集合操作:
def getUserTries(username: String): Future[Int] = {
client.get(s"${username}_tries") flatMap { v => v match {
case Some(c:ChannelBuffer) => Future.value( UserCache.fromChannelBuffer(c).toInt )
case _ => Future.value(0)
}
}
def saveUserTries(username: String, tries: Int): Future[Unit] = {
client.set( s"${username}_tries", UserCache.toChannelBuffer(tries.toString) )
}
您应该通过Finagle获得类似的性能,但我看不出您粘贴的代码有任何错误。 你也许应该看看这个,并根据你的使用情况调整它