[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.코드는 일종의 레디 스 멀티 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.나는 봄의 데이터 레디 스에 대해 알고하지 않습니다. 내가 당신에게 순진 레디 스에서 이것을 달성하기 위해 샘플을 드리겠습니다. 우리가 당신 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
from https://stackoverflow.com/questions/35635337/spring-redis-sort-keys by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] NODE에서 레디 스 SCAN을 사용하여 (0) | 2020.01.19 |
---|---|
[REDIS] 레디 스 펍 / 하위에 떨어 연결에서 복구 (0) | 2020.01.19 |
[REDIS] 레디 스 평 : 때 연결 풀을 사용하는? (0) | 2020.01.19 |
[REDIS] 세트 / pyarrow를 사용하여 레디 스에 팬더의 dataframes을 얻을 방법 (0) | 2020.01.19 |
[REDIS] 어떻게 SO 후 레디 스로 기록 될 것인가? [닫은] (0) | 2020.01.19 |