无法获得Jedis连接;无法从池中获取资源

时间:2017-12-11 23:42:18

标签: java spring redis jedis spring-data-redis

我每5分钟运行一次批处理作业,我不想让其他节点运行相同的工作,因此我使用Jedis锁来锁定对象5分钟。因此,如果其他节点尝试运行相同的作业,则不会获得锁定。获取锁定后作业开始,当我尝试从Redis读取时,我得到以下异常说

lag()

这就是我的代码

select xx.*,
       (lag(stn) over (partition by trunc(stn / 1000) order by id) ||
        ' - ' || stn
       ) as str
from xx;

spring-boot Application.properties文件

'Caused by: redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
    at redis.clients.util.Pool.getResource(Pool.java:53)
    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:226)
    at redis.clients.jedis.JedisPool.getResource(JedisPool.java:16)
    at org.springframework.data.redis.connection.jedis.JedisConnectionFactory.fetchJedisConnector(JedisConnectionFactory.java:194)
    ... 40 more
Caused by: redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out
    at redis.clients.jedis.Connection.disconnect(Connection.java:224)
    at redis.clients.jedis.BinaryClient.disconnect(BinaryClient.java:941)
    at redis.clients.jedis.Connection.close(Connection.java:214)
    at redis.clients.jedis.BinaryClient.close(BinaryClient.java:947)
    at redis.clients.jedis.Jedis.close(Jedis.java:3412)
    at redis.clients.jedis.JedisFactory.makeObject(JedisFactory.java:117)
    at org.apache.commons.pool2.impl.GenericObjectPool.create(GenericObjectPool.java:836)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:434)
    at org.apache.commons.pool2.impl.GenericObjectPool.borrowObject(GenericObjectPool.java:361)
    at redis.clients.util.Pool.getResource(Pool.java:49)'

Job在开始时执行以下代码以获取锁定

@Bean
public Jedis getJedis()
{
    Jedis jedis = new Jedis(this.redisHost, nteger.valueOf(this.redisPort));
    jedis.auth(this.redisPassword);
    return jedis;
}

之后,redis存储库类尝试读取特定模式的值..

# DATA REDIS
spring.data.redis.repositories.enabled=true
# REDIS (RedisProperties)
spring.redis.host=10.160.49.22
spring.redis.password=qweqewqw
spring.redis.ssl=true 
#spring.redis.pool.max-active=10
#spring.redis.pool.max-idle=10
# spring.redis.pool.max-wait=30000
spring.redis.port=6379

然后这是我在日志中看到的完整例外。

JedisLock jedisLock = new JedisLock(jedis, getLockName(), getTimeInMillis());
jedisLoc.acquire()

任何人都知道为什么我会得到这个例外以及如何修复它?

3 个答案:

答案 0 :(得分:1)

1.尝试使用Jedis连接池来获取Jedis实例而不是使用new Jedis(),因为您必须在配置中配置JedisPool 因为你使用它作为bean,所以你应该使用JedisPool bean,然后从你应该执行操作的任何地方获取Jedis并在完成后关闭它。

2.否则使用spring的redisTemplate with config,如下所示

@Bean
public JedisConnectionFactory redisConnectionFactory() {
    JedisConnectionFactory factory = new JedisConnectionFactory();
    factory.setHostName(redisHostName);
    factory.setPort(redisPort);
    factory.setUsePool(true);

    return factory;
}

@Bean
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory cf) {
    RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    redisTemplate.setConnectionFactory(cf);

    return redisTemplate;
}

答案 1 :(得分:1)

从Spring管理的Redis连接池中获取Jedis实例:

import tensorflow as tf
import numpy as np
from tensorflow_serving.apis import classification_pb2, input_pb2
image = np.random.rand(1, 32,32,3)

def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

request = classification_pb2.ClassificationRequest()
request.model_spec.name = 'model'
request.model_spec.signature_name = 'classification_results' 

# Wrap numpy image in an example protobuf
example = tf.train.Example(features=tf.train.Features(feature={'image': _bytes_feature(image.tostring())}))

inp = input_pb2.Input()
inp.example_list.examples.extend([example])

request.input.CopyFrom(inp)

然后您可以使用它实例化JedisLock。

答案 2 :(得分:0)

在Redis的redis。{os} .conf文件中将[0.249800 / 0.261977] - Initializing Unity runtime Loading native plugins Loading AudioPluginMsHRTF.dll "OpenCV-HoloLens.exe" (Win32): "U:\Users\DefaultAccount\AppData\Local\DevelopmentFiles\Template3DVS.Debug_Win32.niklas.baumgartner\AudioPluginMsHRTF.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\HrtfApo.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\execmodelproxy.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. Exception thrown at 0x777BF2B2 in OpenCV-HoloLens.exe: Microsoft C++ exception: Cn::XH at memory location 0x018FE4AC. onecoreuap\windows\moderncore\inputv2\inputhost\components\cursor\client\cursorclient.cpp(43)\InputHost.dll!6F37AB33: (caller: 6F37ACAC) ReturnHr(1) tid(c28) 87B20809 onecoreuap\windows\moderncore\inputv2\inputhost\components\cursor\client\cursorclient.cpp(75)\InputHost.dll!6F37ACC3: (caller: 6F34959D) ReturnHr(2) tid(c28) 87B20809 "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\UiaManager.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\Windows.UI.Core.TextInput.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. [0.001837 / 0.437985] - AppCallbacks::SetCoreWindowEvents "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\Windows.Perception.Stub.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\Windows.Mirage.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. wil(439)\Windows.Mirage.dll!6F7FC73F: (caller: 6F7FC564) ReturnHr(1) tid(7cc) 80070005 Access is denied. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\d3d10warp.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\ResourcePolicyClient.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\ResourcePolicyClient.dll" wurde entladen. [0.142645 / 0.581254] - AppCallbacks::InitializeD3DWindow "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\cryptbase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. Module information: Built with Compiler Ver '191326128' Built from '2018.3/release' branch Version is '2018.3.9f1 (947e1ea5aa8d)' Debug build Application type 'D3D' "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\Windows.Devices.Enumeration.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\deviceassociation.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. [0.624872 / 0.624872] - OnCoreWindowSizeChanged event (0.00, 0.00, 853.33, 480.00), m_Initialized=False. [0.002010 / 0.626882] - OnActivated event. [0.007115 / 0.633997] - OnVisibilityChanged event - Visible. [0.010231 / 0.644227] - OnWindowActivated event - CodeActivated. OS 'Windows 10 (10.0.17763)' Failed to load Game Assembly! "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\HoloShellRuntime.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\capauthz.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. "OpenCV-HoloLens.exe" (Win32): "C:\Windows\System32\wintrust.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden. [0.629493 / 1.273720] - OnCoreWindowSizeChanged event (0.00, 0.00, 853.33, 480.00), m_Initialized=False. [0.024231 / 1.297951] - OnWindowActivated event - Deactivated. 更改为bind 127.0.0.1