2013-09-30 53 views
7

私はかなりの時間をかけてこの問題に取り組んできました。私はredisテンプレートを使用してredisからキーを取得したいと思います。 私はthis.redistemplate.keys( "*")を試しました。 これは何も取得しません。パターンがあっても動作しません。redisテンプレートを使用してRedisからすべてのキーを取得する方法

これに最適な解決策を教えてください。

答えて

8

試してみてください。

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

それは仕事をしましたが、お勧めしませんようですredisTemplate.setKeySerializer(new StringRedisSerializer());

0

を試してみてください?我々は、生産のキーコマンドを使用することはできません。私はRedisTemplate.getConnectionFactory().getConnection().keysがredis Keysコマンドを呼び出していると仮定します。代替案は何ですか?

0

ソリューションは、この

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

それとも、代わりにjedis.hscan()ScanParamsを使用することができるようにすることができます。

11

答えをまとめただけですが、ここで見てきました。

ここでは、RedisTemplateを使用する際に、Redisから鍵を取得する2つの方法があります。

RedisTemplateから直接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); 
} 

注:あなたがあなたの豆でStringRedisSerializerでredisTemplateを設定している必要があります

あなたはJavaベースのBean構成を使用する場合は

redisTemplate.setDefaultSerializer(new StringRedisSerializer()); 

あなたがspring.xmlベースのBean構成

<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" 
    /> 
JedisConnectionFactoryから

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

を使用している場合は、明示的にこの接続を閉じない場合は、あなたがの枯渇に実行されますjedis接続プールはhttps://stackoverflow.com/a/36641934/3884173と同じです。

+0

これは私に多くの助けになりました、より多くのupvotesに値する! – varunkr

+0

これは受け入れられる回答である必要があります。 –

0

redisTemplate.keys()を使用していましたが、機能しませんでした。だから私はジェダイを使いました。以下は、私が使用したコードです。

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