복붙노트

[REDIS] 레디 스 템플릿을 사용하여 레디 스에서 모든 키를 얻는 방법

REDIS

레디 스 템플릿을 사용하여 레디 스에서 모든 키를 얻는 방법

좀 오는군요 레디 스 템플릿을 사용하여 레디 스에서 키를 얻으려면 아주와 함께이 문제에 붙어 있었다. 나는 ( "*") this.redistemplate.keys을 시도; 그러나 이것은 아무것도 가져 오지 않습니다. 심지어 패턴이 작동하지 않습니다.

당신은이에 대한 최선의 해결책이 무엇인지에 대한 조언을 기쁘게 할 수 있습니다.

해결법

  1. ==============================

    1.난 그냥 우리가 여기에서 보이는 한 답변을 통합.

    난 그냥 우리가 여기에서 보이는 한 답변을 통합.

    여기에 우리가 RedisTemplate를 사용할 때, 레디 스에서 키를 얻을 수있는 방법은 두 가지가 있습니다.

    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를 구성해야

    당신은 자바 기반의 빈 설정을 사용하는 경우

    redisTemplate.setDefaultSerializer(new StringRedisSerializer());
    

    당신은 spring.xml 기반 빈 설정을 사용하는 경우

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

    명시 적으로 가까운이 연결을하지 않으면 https://stackoverflow.com/a/36641934/3884173에서 말했듯이, 당신은 jedis 기본 연결 풀의 고갈로 실행됩니다.

  2. ==============================

    2.시험:

    시험:

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

    3.redisTemplate.setKeySerializer 시도 (새 StringRedisSerializer ());

    redisTemplate.setKeySerializer 시도 (새 StringRedisSerializer ());

  4. ==============================

    4.그것은 일을했지만하지 않는 것이 좋습니다 것 같다? 우리가 사용할 수 없기 때문에 키는 생산에 명령. 나는 RedisTemplate.getConnectionFactory ().의 getConnection ()을 가정한다. 키는 키 명령 레디 스를 호출한다. 대안은 무엇인가?

    그것은 일을했지만하지 않는 것이 좋습니다 것 같다? 우리가 사용할 수 없기 때문에 키는 생산에 명령. 나는 RedisTemplate.getConnectionFactory ().의 getConnection ()을 가정한다. 키는 키 명령 레디 스를 호출한다. 대안은 무엇인가?

  5. ==============================

    5.나는 redisTemplate.keys ()를 사용했지만, 그것은 작동하지 않았다. 내가 jedis을 사용 그래서, 그것은했다. 다음은 내가 사용하는 코드입니다.

    나는 redisTemplate.keys ()를 사용했지만, 그것은 작동하지 않았다. 내가 jedis을 사용 그래서, 그것은했다. 다음은 내가 사용하는 코드입니다.

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

    6.해결 방법은 다음과 같이 할 수있다

    해결 방법은 다음과 같이 할 수있다

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

    또는 대신 jedis.hscan ()와 ScanParams를 사용할 수 있습니다.

  7. from https://stackoverflow.com/questions/19098079/how-to-get-all-keys-from-redis-using-redis-template by cc-by-sa and MIT license