Redis
 sql >> Datenbank >  >> NoSQL >> Redis

So erhalten Sie alle Schlüssel von Redis mithilfe der Redis-Vorlage

Ich habe nur die Antworten konsolidiert, die wir hier gesehen haben.

Hier sind die zwei Möglichkeiten, Schlüssel von Redis zu erhalten, wenn wir RedisTemplate verwenden.

1. Direkt aus 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);
}

Hinweis:Sie sollten redisTemplate mit StringRedisSerializer konfiguriert haben in Ihrer Bohne

Wenn Sie Java-basierte Bean-Konfiguration verwenden

redisTemplate.setDefaultSerializer(new StringRedisSerializer());

Wenn Sie eine spring.xml-basierte Bean-Konfiguration verwenden

<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. Von 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();

Wenn Sie diese Verbindung nicht explizit schließen, wird der zugrunde liegende Jedis-Verbindungspool erschöpft, wie in https://stackoverflow.com/a/36641934/3884173 beschrieben.