Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

स्प्रिंग रेडिस सॉर्ट कुंजियाँ

कोड पोस्ट के अंत में है, यदि आप रेडिस में मल्टी एचसेट कुंजी सॉर्ट करने के सिद्धांत से परिचित हैं, तो निम्न सामग्री को छोड़ दें और सीधे कोड पढ़ें।

रेडिस सॉर्ट का उद्देश्य सूची/सेट/ज़सेट के अंदर फ़ील्ड को सॉर्ट करना है, लेकिन इस विधि का उपयोग निर्दिष्ट मीट्रिक के आधार पर बहु ​​कुंजी आधार को सॉर्ट करने के लिए किया जा सकता है। हम निर्दिष्ट फ़ील्ड द्वारा बहु hset कुंजियों को सॉर्ट करने के लिए "सॉर्ट" का उपयोग कर सकते हैं, लेकिन hset कुंजियों के पैटर्न के बारे में सीमा है।
उदाहरण के लिए, यदि hset कुंजियों का पैटर्न "हैश{i}" है (i है पूर्णांक), इस शर्त के तहत हम इसे सॉर्ट कर सकते हैं।

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

हैश1 की सामग्री पर एक नज़र डालें:

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

प्रत्येक हैश कुंजी में दो फ़ील्ड होते हैं:"आईडी", "नाम"। अगर हम इन hset keys को उसकी id से सॉर्ट करना चाहते हैं। हमें क्या करना चाहिए?

सबसे पहले, "myset" नामक एक सेट कुंजी जोड़ें। "myset" एक सेट कुंजी है जिसमें सदस्य {"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"

यूरेका, हैश{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;
    }
}

चलने का परिणाम redisTemplateSort(redisTemplate) (कोड में नाम के अनुसार क्रमबद्ध करें) :

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. NodeJS + ExpressJS + RedisStore सत्र अपरिभाषित है

  2. रेडिस सक्रिय-सक्रिय प्रतिकृति

  3. ServiceStack.Redis परिवहन पढ़ने में असमर्थ - BasicRedisClientManager

  4. क्या रेडिस सूची या सेट पॉप विधि थ्रेड सुरक्षित है?

  5. मुझे रेडिस में एक सरणी कैसे स्टोर करनी चाहिए?