私はかなりの時間をかけてこの問題に取り組んできました。私はredisテンプレートを使用してredisからキーを取得したいと思います。 私はthis.redistemplate.keys( "*")を試しました。 これは何も取得しません。パターンがあっても動作しません。redisテンプレートを使用してRedisからすべてのキーを取得する方法
これに最適な解決策を教えてください。
私はかなりの時間をかけてこの問題に取り組んできました。私はredisテンプレートを使用してredisからキーを取得したいと思います。 私はthis.redistemplate.keys( "*")を試しました。 これは何も取得しません。パターンがあっても動作しません。redisテンプレートを使用してRedisからすべてのキーを取得する方法
これに最適な解決策を教えてください。
試してみてください。
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));
}
それは仕事をしましたが、お勧めしませんようですredisTemplate.setKeySerializer(new StringRedisSerializer());
を試してみてください?我々は、生産のキーコマンドを使用することはできません。私はRedisTemplate.getConnectionFactory().getConnection().keys
がredis Keysコマンドを呼び出していると仮定します。代替案は何ですか?
ソリューションは、この
String pattern = "abc"+"*";
Set<String> keys = jedis.keys(pattern);
for (String key : keys) {
jedis.keys(key);
}
それとも、代わりにjedis.hscan()
とScanParams
を使用することができるようにすることができます。
答えをまとめただけですが、ここで見てきました。
ここでは、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と同じです。
redisTemplate.keys()
を使用していましたが、機能しませんでした。だから私はジェダイを使いました。以下は、私が使用したコードです。
Jedis jedis = new Jedis("localhost", 6379);
Set<String> keys = jedis.keys("*".getBytes());
for (String key : keys) {
// do something
} // for
これは私に多くの助けになりました、より多くのupvotesに値する! – varunkr
これは受け入れられる回答である必要があります。 –