gpt4 book ai didi

grails - 重载和大缓存文件上带有memcached(ElastiCache)的grails应用程序中的超时

转载 作者:行者123 更新时间:2023-12-02 14:07:13 26 4
gpt4 key购买 nike

我有一个grails应用程序,该应用程序始终使用memcached存储请求结果。

在请求中,存储在缓存中的结果很小(100kb)可以很好地处理50K个请求,但是在一种情况下,如果结果大约为800kb,则当分钟的请求数超过1K时,应用程序将引发异常。

我尝试在最近两天解决此问题,但所有答案都没有定论。我开始认为问题可能出在ElastiCache上。

对于实现,我使用了AWS ElastiCache Cluster Client,即spymemcached的fork。

我试图解决将客户端更改为默认spymemcached和xmemcached的问题,但错误是相同的。

异常是:java.util.concurrent.ExecutionException:net.spy.memcached.internal.CheckedOperationTimeoutException:操作超时。

我的服务实现:

import net.spy.memcached.*
import grails.converters.JSON
import org.springframework.beans.factory.InitializingBean

class MemCacheService implements InitializingBean {

String ELASTIC_CACHE_CLUSTER_IP = "teste.ptsfty.cfg.use1.cache.amazonaws.com";
def ELASTIC_CACHE_CLUSTER_PORT = 11211
def MemcachedClient client
def expireTime = 21600

def void afterPropertiesSet() {
client = new MemcachedClient(new InetSocketAddress(ELASTIC_CACHE_CLUSTER_IP, ELASTIC_CACHE_CLUSTER_PORT));
}

def getDataOnCache(key) {
try {
def result = client.get(key)
if (result) return JSON.parse(result)
else return null
} catch(Exception e) {
println e.getMessage()
return null
}
}

def saveOnCache(key, value) {
try {
def result = client.add(key, expireTime, value);
return result
} catch(Exception e) {
println e.getMessage()
return null
}

}

def removeOnCache(key) {
def result = client.delete(key);
return result
}


}

最佳答案

如果Elasticache随着连接数量的增加而停止工作,请尝试增加memcached_connections_overhead参数。您的Elasticache实例可能内存不足,无法处理传入的连接。每个实例使用少量内存来处理每个连接,并且此参数通常具有较低的默认值。

关于grails - 重载和大缓存文件上带有memcached(ElastiCache)的grails应用程序中的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27607279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com