Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Klawisze sortowania Spring Redis

Kod znajduje się na końcu postu, jeśli znasz zasadę sortowania wielu kluczy hset w redis, pomiń następującą treść i bezpośrednio przeczytaj kod.

Redis Sort ma na celu sortowanie pól w List/Set/Zset, ale ta metoda może być używana do sortowania wielu kluczy na podstawie określonej metryki, którą chcemy. Możemy użyć "sort" do sortowania wielu kluczy hset według określonego pola, ale istnieje ograniczenie dotyczące wzorca kluczy hset.
Na przykład, jeśli wzorzec kluczy hset to "hash{i}"(i jest liczba całkowita), pod tym warunkiem możemy ją posortować.

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

Spójrz na zawartość hash1:

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

Każdy klucz hash zawiera dwa pola:"id", "name". Jeśli chcemy posortować te klucze hset według ich id. Co powinniśmy zrobić?

Najpierw dodaj klucz zestawu o nazwie „myset”. "myset" to klucz zestawu, który zawiera elementy {"1", "2", "3"}.

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

Następnie uruchom następujące polecenie:

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"

Eureka, posortuj hash{1-3} według jego identyfikatora.
Oto kod użycia Spring Redis do wykonania zadania:

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;
    }
}

Wynik uruchomienia redisTemplateSort(redisTemplate) (jak sortować według nazwy w kodzie) :

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}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. jak mogę przekazać nieskończoność do redis z Pythona?

  2. Ruby resque bez ładowania środowiska szyn

  3. Integracja bibliotek Flask-Mail i Redis Queue daje błąd

  4. Przypadki użycia dla funkcji punktacji i rankingu Redis dla zestawów

  5. problem z połączeniem z redis, aby przejść z wieloma pracownikami kues