13

私はかなり長い間この問題に悩まされてきました。redis テンプレートを使用して redis からキーを取得したいと考えています。私はこれを試しました.redistemplate.keys("*"); しかし、これは何も取得しません。パターンにしても動かない。

これに対する最善の解決策を教えてください。

4

8 に答える 8

23

ここで見た答えをまとめました。

RedisTemplate を使用する場合、Redis からキーを取得する 2 つの方法を次に示します。

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

注: Beanで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"
    />

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

この接続を明示的に閉じないと、 https: //stackoverflow.com/a/36641934/3884173 で述べられているように、基礎となる jedis 接続プールが枯渇します。

于 2016-08-19T06:17:13.333 に答える
11

試す:

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));
}
于 2014-02-04T09:39:53.113 に答える
4

試すredisTemplate.setKeySerializer(new StringRedisSerializer());

于 2015-02-18T17:15:36.063 に答える
1

を使用してredisTemplate.keys()いましたが、動作しませんでした。だから私はジェディスを使いました、それはうまくいきました。以下は私が使用したコードです。

    Jedis jedis = new Jedis("localhost", 6379);
    Set<String> keys = jedis.keys("*".getBytes());
    for (String key : keys) {
        // do something
    } // for
于 2017-01-03T08:48:38.313 に答える