sql >> Base de Datos >  >> NoSQL >> Redis

Cómo obtener todas las claves de Redis usando la plantilla de Redis

Acabo de consolidar las respuestas que hemos visto aquí.

Estas son las dos formas de obtener claves de Redis, cuando usamos RedisTemplate.

1. Directamente desde RedisTemplate

Set<String> redisKeys = template.keys("samplekey*"));
// Store the keys in a List
List<String> keysList = new ArrayList<>();
Iterator<String> it = redisKeys.iterator();
while (it.hasNext()) {
       String data = it.next();
       keysList.add(data);
}

Nota:Debería haber configurado redisTemplate con StringRedisSerializer en tu frijol

Si utiliza una configuración de beans basada en Java

redisTemplate.setDefaultSerializer(new StringRedisSerializer());

Si utiliza una configuración de bean basada en spring.xml

<bean id="stringRedisSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>

<!-- redis template definition -->
<bean
    id="redisTemplate"
    class="org.springframework.data.redis.core.RedisTemplate"
    p:connection-factory-ref="jedisConnectionFactory"
    p:keySerializer-ref="stringRedisSerializer"
    />

2. De JedisConnectionFactory

RedisConnection redisConnection = template.getConnectionFactory().getConnection();
Set<byte[]> redisKeys = redisConnection.keys("samplekey*".getBytes());
List<String> keysList = new ArrayList<>();
Iterator<byte[]> it = redisKeys.iterator();
while (it.hasNext()) {
       byte[] data = (byte[]) it.next();
       keysList.add(new String(data, 0, data.length));
}
redisConnection.close();

Si no cierra esta conexión explícitamente, se encontrará con un agotamiento del grupo de conexiones jedis subyacente como se indica en https://stackoverflow.com/a/36641934/3884173.