2017-11-13 12 views
1

내가 스프링 프로젝트에서 레디 스에서 검색 할하고 우리는 레디 스 캐시를 사용하고 데이터의 샘플 유형 아래에 우리가 지금Redis 캐시 목록에서 요소 값으로 검색하는 방법은 무엇입니까?

LLPUSH mylist "abc" "xyx" "awe" "wwqw" 

를 저장하는, 예를 들어 나의 봄 프로젝트 클래스는 일부 외부에서 하나 개의 요소를 수신 클라이언트, "ABC"어떻게이 요소가 레디 스 캐시의 목록에 있는지 제가 확인을 원하는

ListOperations<String, Object> listOperations= redisTemplate.opsForList(); 

listOperations.get(key,"abc") , returns abc 

을 얻거나, 이하와 같은 값으로 뭔가를 레디 스 목록을 검색 할 수 있습니다

listOperations.contains(key,"abc") returns either true or false , based value present in the list or not 

누군가가이 유형의 클라이언트 lib가 Java 측에서 redis 용으로 제공되며 스프링 부트 프로젝트에서 사용할 수 있음을 제안 해주십시오.

+0

https://projects.spring.io/spring-data-redis/이 봐 것은이 .. –

+0

당신에게 도움이 이미 봄 - 데이터 - 레디 스 프로젝트를 확인 할 수 있으며, 그 redisTemplate에 우리는 opsForList를 가지고 있으며, 그것들은 내 요구 사항에 대한 어떤 방법도 아니다. – Bravo

답변

0

Redis 목록은 링크 된 목록으로 구현됩니다.

  • 따라서 목록의 모든 요소를 ​​LRANGE을 사용하여 가져와 특정 요소를 찾으려면 반복해야합니다.
  • 목록에 여러 항목이없고 주문에 과 관련이없는 경우 특정 요소를 제거하려면 LREM을 사용할 수 있으며 에는 목록 크기에 차이가있는 경우 요소가 있습니다. 나중에 요소가 제거 된 경우 다시 삽입 할 수 있습니다.

    Long initialSize = redisTemplate.opsForList().size(key); 
    redisTemplate.opsForList().remove(key,0, value); 
    Long finalSize = redisTemplate.opsForList().size(key); 
    if(finalSize - initialSize > 0){ 
        redisTemplate.opsForList().rightPush(key,value); 
        return true;  //Element exists 
    } 
    return false; //Does not exist 
    

는 작업 atomic을 고려하십시오.

here에서 다른 스프링 재 활성화 목록 작업을 가져올 수 있습니다.

1
당신은 같은 목록을 삽입 할 수 삽입하는 동안 당신은 redisTemplate.opsForSet.isMember(keyForSet,valueToSearch)

을 사용할 수 있습니다 redisTemplate으로 사용하기 위해서는 효율적인 O (1) 복잡성 값으로 요소를 검색 할 수 sismember(keyForSet,valueToSearch)을 가지고 레디 스 설정을 사용할 수 있습니다

jedis.sadd (keyForSet, myList.toArray (new String [myList.size()])); 또는 redisTemplate redisTemplate.opsForSet.add(keyForSet, myList.toArray(new String[myList.size()]));