Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment obtenir toutes les clés de Redis à l'aide du modèle Redis

Je viens de consolider les réponses, nous avons vu ici.

Voici les deux façons d'obtenir des clés de Redis, lorsque nous utilisons RedisTemplate.

1. Directement depuis 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);
}

Remarque :Vous devez avoir configuré redisTemplate avec StringRedisSerializer dans ta fève

Si vous utilisez une configuration de bean basée sur Java

redisTemplate.setDefaultSerializer(new StringRedisSerializer());

Si vous utilisez une configuration de bean basée sur 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 vous ne fermez pas explicitement cette connexion, vous rencontrerez un épuisement du pool de connexions jedis sous-jacent, comme indiqué dans https://stackoverflow.com/a/36641934/3884173.