복붙노트

[REDIS] 봄 레디 스 정렬 키

REDIS

봄 레디 스 정렬 키

나는, 레디 스 (봄 데이터 레디 스)에서 다음 키를

localhost>Keys *
"1+ { \"_id":"1", \"Name\" : \"C5796\" , \"Site\" : \"DRG1\"}"
"2+ { \"_id":"2", \"Name\" : \"CX1XE\" , \"Site\" : \"DG1\"}"
"3+ { \"_id":"3", \"Name\" : \"C553\" , \"Site\" : \"DG1\"}"

내가 아이디 / 이름 / 사이트에 따라 정렬 할 경우, 어떻게 그것을 봄 레디 스에서 할 수 있습니까?

List<Object> keys = redistemplate.sort(SortQueryBuilder.sort("Customer").build());

과,

SortQuery<String> sort = SortQueryBuilder.sort(key).noSort().get(field).build(); 
List<?> keys = redistemplate.boundHashOps(key).getOperations().sort(sort);

작동하지 않습니다.

해결법

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

    1.코드는 일종의 레디 스 멀티 hset 키의 원칙을 잘 알고있는 경우, 다음과 같은 내용을 건너 뛰고 직접 코드를 읽어 게시물의 마지막에 있습니다.

    코드는 일종의 레디 스 멀티 hset 키의 원칙을 잘 알고있는 경우, 다음과 같은 내용을 건너 뛰고 직접 코드를 읽어 게시물의 마지막에 있습니다.

    레디 스 정렬 목록 / 설정 / ZSET 내부 정렬 필드를 목표로하지만,이 방법은 통계 우리가 원하는 지정에 종류의 멀티 키베이스로 사용할 수 있습니다. 우리는 특정 필드에 의해 다중 hset 키를 정렬하는 "일종의"사용할 수 있지만 hset 키의 패턴에 대한 제한이있다. hset 키의 패턴 인 경우, 예를 들어, "해시 {I}는"우리는 그 정렬 조건이있다, (I는 정수이다).

    127.0.0.1:6379> keys hash*
    1) "hash3"
    2) "hash2"
    3) "hash1"
    

    hash1의 내용을 살펴 보자 :

    127.0.0.1:6379> hgetall hash1
    1) "id"
    2) "24"
    3) "name"
    4) "kobe"
    

    "ID", "이름": 모든 해시 키는 두 개의 필드가 포함되어 있습니다. 우리는 ID로이 hset 키를 정렬합니다. 우리는 무엇을해야합니까?

    먼저, "요소인지"라는 이름의 설정 키를 추가합니다. "요소인지가"부재를 포함하는 세트 인 {키 "1", "2", "3"}.

    127.0.0.1:6379> smembers myset
    1) "1"
    2) "2"
    3) "3"
    

    그런 다음 명령을 실행합니다 :

    127.0.0.1:6379> SORT myset BY hash*->id GET hash*->id GET hash*->name
    1) "3"
    2) "wade"
    3) "24"
    4) "kobe"
    5) "30"
    6) "curry"
    

    ID로 유레카, 정렬 해시 {1-3}. 여기에 일을 봄 레디 스를 사용하는 코드는 다음과 같습니다

    public static String getRandomStr() {
        return String.valueOf(new Random().nextInt(100));
    }
    
    public static void redisTemplateSort(RedisTemplate redisTemplate) {
        String sortKey = "sortKey";
    
        StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
    
        redisTemplate.setKeySerializer(stringRedisSerializer);
        redisTemplate.setValueSerializer(stringRedisSerializer);
        redisTemplate.setHashKeySerializer(stringRedisSerializer);
        redisTemplate.setHashValueSerializer(stringRedisSerializer);
    
        redisTemplate.delete(sortKey);
        if (!redisTemplate.hasKey(sortKey)) {
            for (int i = 0; i < 10; i++) {
                redisTemplate.boundSetOps(sortKey).add(String.valueOf(i));
                String hashKey = "hash" + i,
                        strId = String.valueOf(i),
                        strName = getRandomStr(),
                        strSite = getRandomStr();
                redisTemplate.boundHashOps(hashKey).put("_id", strId);
                redisTemplate.boundHashOps(hashKey).put("Name", strName);
                redisTemplate.boundHashOps(hashKey).put("Site", strSite);
    
                System.out.printf("%s : {\"_id\": %s, \"Name\": %s, \"Site\", %s}\n",
                        hashKey, strId, strName, strSite);
            }
        }
    
        SortQuery<String> sortQuery = SortQueryBuilder.sort(sortKey).by("hash*->Name")
                .get("hash*->_id").get("hash*->Name").get("hash*->Site").build();
        List<String> sortRslt = redisTemplate.sort(sortQuery);
    
        for (int i = 0; i < sortRslt.size(); ) {
            System.out.printf("{\"_id\": %s, \"Name\": %s, \"Site\", %s}\n", sortRslt.get(i+2), sortRslt.get(i+1), sortRslt.get(i));
            i += 3;
        }
    }
    

    (코드에서 이름으로 일종의) (redisTemplate) redisTemplateSort를 실행의 결과 :

    hash0 : {"_id": 0, "Name": 59, "Site", 60}
    hash1 : {"_id": 1, "Name": 37, "Site", 57}
    hash2 : {"_id": 2, "Name": 6, "Site", 40}
    hash3 : {"_id": 3, "Name": 91, "Site", 58}
    hash4 : {"_id": 4, "Name": 39, "Site", 32}
    hash5 : {"_id": 5, "Name": 27, "Site", 82}
    hash6 : {"_id": 6, "Name": 43, "Site", 10}
    hash7 : {"_id": 7, "Name": 17, "Site", 55}
    hash8 : {"_id": 8, "Name": 14, "Site", 91}
    hash9 : {"_id": 9, "Name": 39, "Site", 91}
    {"_id": 40, "Name": 6, "Site", 2}
    {"_id": 91, "Name": 14, "Site", 8}
    {"_id": 55, "Name": 17, "Site", 7}
    {"_id": 82, "Name": 27, "Site", 5}
    {"_id": 57, "Name": 37, "Site", 1}
    {"_id": 32, "Name": 39, "Site", 4}
    {"_id": 91, "Name": 39, "Site", 9}
    {"_id": 10, "Name": 43, "Site", 6}
    {"_id": 60, "Name": 59, "Site", 0}
    {"_id": 58, "Name": 91, "Site", 3}
    
  2. ==============================

    2.나는 봄의 데이터 레디 스에 대해 알고하지 않습니다. 내가 당신에게 순진 레디 스에서 이것을 달성하기 위해 샘플을 드리겠습니다. 우리가 당신 ID, 이름 및 사이트를 가지고 해시를 가지고 있다고 가정 해 봅시다. 그리고 난 그 해시의 키를 나타내는 목록을 가지고있다.

    나는 봄의 데이터 레디 스에 대해 알고하지 않습니다. 내가 당신에게 순진 레디 스에서 이것을 달성하기 위해 샘플을 드리겠습니다. 우리가 당신 ID, 이름 및 사이트를 가지고 해시를 가지고 있다고 가정 해 봅시다. 그리고 난 그 해시의 키를 나타내는 목록을 가지고있다.

    내 구조 등이 될 것입니다 :

    lpush("Values",1);  
    
    
    hset("hash_1","id","1"),hset("hash_1","Name","C5796"),hset("hash_1","Site","DRG1")
    
    for second hash
    lpush("Values",2);
    ...
    

    마찬가지로 모든 값에 대해 당신은 해시 세트로합니다. 이제 정렬이 좋아해요

    SORT "Values" BY hash_*->id get hash_*->id get hash_*->name get hash_*->site
    

    이것은 당신이 ID를 기반 및 결과 분류 HashMaps을 오름차순으로 돌아갑니다. 마찬가지로 당신은 이름 / 사이트에 할 수 있습니다. 레디 스의 정렬에 대한 자세한 정보를 원하시면 : http://redis.io/commands/sort

  3. from https://stackoverflow.com/questions/35635337/spring-redis-sort-keys by cc-by-sa and MIT license