Vraag Hoe alle sleutels van Redis te krijgen met behulp van de redissjabloon


Ik zit al geruime tijd vast aan dit probleem.Ik wil sleutels van redis halen met behulp van de sjabloon van redis. Ik probeerde dit. Redistemplate.keys ("*"); maar dit haalt niets op. Zelfs met het patroon werkt het niet.

Kunt u alstublieft adviseren wat de beste oplossing voor dit is.


12
2017-09-30 15:27


oorsprong


antwoorden:


Ik heb zojuist de antwoorden geconsolideerd, die we hier hebben gezien.

Hier zijn de twee manieren om sleutels van Redis te krijgen, wanneer we RedisTemplate gebruiken.

1. Rechtstreeks van 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);
}

Opmerking: U zou redisTplate moeten hebben geconfigureerd met StringRedisSerializer in je boon

Als u een java-gebaseerde bonenconfiguratie gebruikt

redisTemplate.setDefaultSerializer(new StringRedisSerializer());

Als u bean-configuratie op basis van lente.xml gebruikt

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

Als je deze verbinding niet expliciet sluit, kom je een uitputting tegen van de onderliggende jedis-verbindingspool zoals gezegd https://stackoverflow.com/a/36641934/3884173.


14
2017-08-19 06:17



proberen:

Set<byte[]> keys = RedisTemplate.getConnectionFactory().getConnection().keys("*".getBytes());

Iterator<byte[]> it = keys.iterator();

while(it.hasNext()){

    byte[] data = (byte[])it.next();

    System.out.println(new String(data, 0, data.length));
}

8
2018-02-04 09:39



Proberen redisTemplate.setKeySerializer(new StringRedisSerializer());


3
2018-02-18 17:15



Ik was aan het gebruiken redisTemplate.keys(), maar het werkte niet. Dus ik gebruikte jedi's, het werkte. Het volgende is de code die ik heb gebruikt.

    Jedis jedis = new Jedis("localhost", 6379);
    Set<String> keys = jedis.keys("*".getBytes());
    for (String key : keys) {
        // do something
    } // for

1
2018-01-03 08:48



Het werkte, maar lijkt niet aan te raden? Omdat we het Keys-commando niet in de productie kunnen gebruiken. Ik neem aan RedisTemplate.getConnectionFactory().getConnection().keys is het commando 'redis Keys' aanroepen. Wat zijn de alternatieven?


0
2018-02-22 06:19



Oplossing kan zo zijn

String pattern = "abc"+"*";
Set<String> keys = jedis.keys(pattern);
for (String key : keys) {
    jedis.keys(key);
} 

Of je kunt gebruiken jedis.hscan() en ScanParams in plaats daarvan.


0
2017-08-09 08:58