问题描述
Set<String> keys = getKeysByPattern(myKey);
try (Jedis jedis = RedisConnectionFactory.getPool().getResource()) {
Pipeline pipeline = jedis.pipelined();
pipeline.multi();
for (String key : keys) {
Map<String,String> dataMap = hgetAll(key);
Map<String,String> dataMapNew = new HashMap<>();
// some codes collect data to dataMapNew ...
//Update to redis
if(!dataMapNew.isEmpty()){
pipeline.del(key);
pipeline.hmset(key,dataMapNew);
}
}
pipeline.exec();
} catch (Exception ex) {
log.error(ex.getMessage(),ex);
}
还有我的RedisConnectionFactory
班级:
public class RedisConnectionFactory {
private static final int JEdis_DEFAULT_TIMEOUT = 60000;
private static JedisPool jedisPool;
public static void init(String host,int port,String password) {
jedisPool = new JedisPool(buildPoolConfig(),host,port,JEdis_DEFAULT_TIMEOUT,password);
}
// Example config from: https://www.baeldung.com/jedis-java-redis-client-library
private static JedisPoolConfig buildPoolConfig() {
final JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(1000);
poolConfig.setMaxIdle(1000);
poolConfig.setMinIdle(500);
poolConfig.setTestOnBorrow(true);
poolConfig.setTestOnReturn(true);
poolConfig.setTestWhileIdle(true);
poolConfig.setMaxWaitMillis(Duration.ofSeconds(10).toMillis());
poolConfig.setMinevictableIdleTimeMillis(Duration.ofSeconds(60).toMillis());
poolConfig.setSoftMinevictableIdleTimeMillis(Duration.ofSeconds(120).toMillis());
poolConfig.setTimeBetweenevictionRunsMillis(Duration.ofSeconds(30).toMillis());
poolConfig.setNumTestsPerevictionRun(3);
poolConfig.setBlockWhenExhausted(true);
return poolConfig;
}
static JedisPool getPool() {
return jedisPool;
}
当我开始跑步时,出现错误:
redis.clients.jedis.exceptions.JedisException: Resource is returned to the pool as broken
at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:256)
at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:16)
at redis.clients.jedis.Jedis.close(Jedis.java:3506)
at vn.com.ntqsolution.cache.UserRankingCache.updateLastDayDataV2(UserRankingCache.java:415)
at vn.com.ntqsolution.service.impl.UserRankingServiceImpl.updateLastDayData(UserRankingServiceImpl.java:30)
at vn.com.ntqsolution.worker.UserRankingRefresher.updateranking(UserRankingRefresher.java:73)
at vn.com.ntqsolution.worker.UserRankingRefresher.resetRankingCache(UserRankingRefresher.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:84)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.socketTimeoutException: Read timed out
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:202)
at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
at redis.clients.jedis.Protocol.process(Protocol.java:153)
at redis.clients.jedis.Protocol.read(Protocol.java:218)
at redis.clients.jedis.Connection.readProtocolWithCheckingbroken(Connection.java:341)
at redis.clients.jedis.Connection.getAll(Connection.java:311)
at redis.clients.jedis.Connection.getAll(Connection.java:303)
at redis.clients.jedis.Pipeline.sync(Pipeline.java:99)
at redis.clients.jedis.Pipeline.clear(Pipeline.java:85)
at redis.clients.jedis.BinaryJedis.resetState(BinaryJedis.java:1858)
at redis.clients.jedis.JedisPool.returnResource(JedisPool.java:252)
... 20 common frames omitted
Caused by: java.net.socketTimeoutException: Read timed out
at java.net.socketInputStream.socketRead0(Native Method)
at java.net.socketInputStream.socketRead(SocketInputStream.java:116)
at java.net.socketInputStream.read(SocketInputStream.java:171)
at java.net.socketInputStream.read(SocketInputStream.java:141)
at java.net.socketInputStream.read(SocketInputStream.java:127)
at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:196)
... 30 common frames omitted
我不知道要解决此问题。谁能帮我吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)