2013-09-30 25 views

cevap

8

deneyin:

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)); 
} 
3

deneyin redisTemplate.setKeySerializer(new StringRedisSerializer());

0

Bu çalışma yaptı, ancak önerilmez görünüyor? Çünkü üretimde Keys komutunu kullanamıyoruz. RedisTemplate.getConnectionFactory().getConnection().keys redis Keys komutunu çağırıyor. Alternatifler nelerdir?

0

Çözüm bu

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

gibi olabilir Yoksa yerine jedis.hscan() ve ScanParams kullanabilirsiniz.

11

Sadece yanıtları pekiştirdim, burada gördük.

RedisTemplate'i kullandığımızda, Redis'den anahtar almanın iki yolu vardır. RedisTemplate Doğrudan

1.

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); 
} 

Not: kullanıyorsanız Sen fasulye

yılında StringRedisSerializerile redisTemplate yapılandırılmış olması gereken java tabanlı fasulye yapılandırma

redisTemplate.setDefaultSerializer(new StringRedisSerializer()); 

kullanırsanız açıkça bu bağlantıyı kapatmak yoksa spring.xml bazlı fasulye yapılandırma JedisConnectionFactory itibaren

<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.

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

, sen bir tükenme içine çalışacaktır https://stackoverflow.com/a/36641934/3884173'da belirtildiği gibi temel jedis bağlantı havuzu.

+0

Bu bana çok yardımcı, daha upvotes hak !! – varunkr

+0

Bu kabul edilen cevap olmalı. –

0

redisTemplate.keys() kullanıyordum, ancak çalışmıyordu. Ben de Jedis kullandım, işe yaradı. Aşağıdaki kullandığım koddur.

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