Hoy descubrí que el método de conexión predeterminado de Jedis es jedis = new Jedis ("localhost", 6379), y el tiempo de espera de conexión siempre ocurre. Más tarde descubrí que el paquete de clase jedis también tiene una forma de establecer el tiempo máximo de conexión.
1-> La instancia de Jedis debe obtenerse de JedisPool;
2->Después de usar la instancia Jedis, debes devolverla a JedisPool;
3-> Si Jedis comete un error durante el uso, también debe devolverse a JedisPool;
El código es el siguiente.
Copie el código de código de la siguiente manera:
Configuración JedisPoolConfig = nueva JedisPoolConfig();
config.setMaxActive(100);
config.setMaxIdle(20);
config.setMaxWait(1000l);
Piscina JedisPool;
grupo = nuevo JedisPool(config, "2xx.xx.xx.14", 6379);
booleano préstamoOrOprSuccess = verdadero;
intentar {
jedis = piscina.getResource();
// redis opta por instancia
} captura (JedisConnectionException e) {
pedir prestadoOrOprSuccess = falso;
si (jedis! = nulo)
piscina.returnBrokenResource(jedis);
} finalmente {
si (prestadoOrOprSuccess)
piscina.returnResource(jedis);
}
jedis = piscina.getResource();
JedisPool depende del paquete de clases Apache
commons-pool-1.5.6.jar
1->Aunque se lanza JedisConnectionException, en realidad hay dos tipos de errores. Uno es pool.getResource(), que no puede obtener una instancia jedis disponible; el otro es que los errores durante jedis.set/get también arrojarán esta excepción; Para realizar la distinción, se implementa en función de si la instancia es nula. Si es nula, demuestra que la instancia no se ha inicializado en absoluto, por lo que no es necesario devolverla al grupo; no es nulo, demuestra que es necesario devolverlo al grupo;
2-> Cuando ocurre un error de instancia, también se debe llamar a returnBrokenResource para devolverlo al grupo. De lo contrario, es posible que todavía haya datos en el búfer de la instancia obtenida a través de getResource la próxima vez, ¡y puede ocurrir un problema!
Los parámetros de configuración de JedisPool dependen en gran medida de los requisitos reales de la aplicación y de las capacidades de software y hardware. Nunca antes había usado commons-pool, así que esta vez pasé una habitación entera analizando el significado de estos parámetros. . . La mayoría de los parámetros de configuración de JedisPool están asignados por los elementos correspondientes de JedisPoolConfig.
maxActive: controla cuántas instancias jedis se pueden asignar a un grupo, obtenido a través de pool.getResource(); si el valor es -1, significa que no hay límite si el grupo ha asignado instancias jedis maxActive, el estado del grupo es; esta vez se agota, en JedisPoolConfig
maxIdle: controla el número máximo de instancias jedis en estado inactivo que puede tener un grupo;
whenExhaustedAction: indica la acción que realizará el grupo cuando se hayan asignado todas las instancias jedis en el grupo. Hay tres tipos de WHEN_EXHAUSTED_FAIL de forma predeterminada (lo que significa que cuando no hay una instancia jedis, se lanzará directamente;
NoSuchElementException), WHEN_EXHAUSTED_BLOCK (significa que está bloqueado o que se lanza una JedisConnectionException cuando se alcanza maxWait), WHEN_EXHAUSTED_GROW (significa que se crea una nueva instancia jedis, lo que significa que el conjunto maxActive es inútil);
maxWait: indica el tiempo de espera máximo al tomar prestada una instancia de Jedis. Si se excede el tiempo de espera, se lanzará JedisConnectionException directamente;
testOnBorrow: al tomar prestada una instancia jedis, si se debe realizar la operación Alidate por adelantado, si es verdadero, las instancias jedis obtenidas están disponibles;
testOnReturn: si se debe realizar la operación de validación por adelantado al regresar al grupo;
testWhileIdle: si es verdadero, significa que hay un hilo de eliminación de objetos inactivos que escanea el objeto inactivo. Si la validación falla, el objeto se eliminará del grupo. Este elemento solo tiene sentido cuando timeBetweenEvictionRunsMillis es mayor que 0;
timeBetweenEvictionRunsMillis: indica el número de milisegundos que el eliminador de objetos inactivos necesita para dormir entre dos escaneos;
numTestsPerEvictionRun: indica el número máximo de objetos escaneados por el eliminador de objetos inactivos cada vez;
minEvictableIdleTimeMillis: indica el tiempo mínimo para que un objeto permanezca en estado inactivo al menos antes de que el eliminador de objetos inactivos pueda escanearlo y desalojarlo. Este elemento solo tiene sentido cuando timeBetweenEvictionRunsMillis es mayor que 0;
softMinEvictableIdleTimeMillis: según minEvictableIdleTimeMillis, se agregan al menos objetos minIdle al grupo. Si es -1, desalojado no desalojará ningún objeto según el tiempo de inactividad. Si minEvictableIdleTimeMillis>0, esta configuración no tiene sentido y solo tiene sentido cuando timeBetweenEvictionRunsMillis es mayor que 0;
lifo: cuando lendObject devuelve un objeto, se usa DEFAULT_LIFO (el último en entrar, el primero en salir, la cola más utilizada similar al caché). Si es falso, significa cola FIFO;
La configuración predeterminada de JedisPoolConfig para algunos parámetros es la siguiente:
pruebaWhileIdle=verdadero
minEvictableIdleTimeMills=60000
timeBetweenEvictionRunsMillis=30000
numTestsPerEvictionRun=-1