sql >> データベース >  >> NoSQL >> Redis

SpringRedisのソートキー

    コードは投稿の最後にあります。マルチhsetキーのredisでの並べ替えの原則に精通している場合は、次のコンテンツをスキップしてコードを直接読んでください。

    Redis Sortは、List / Set / Zset内のフィールドを並べ替えることを目的としていますが、このメソッドを使用して、必要な指定されたメトリックに基づいてマルチキーを並べ替えることができます。 「sort」を使用して、指定したフィールドで複数のhsetキーを並べ替えることができますが、hsetキーのパターンには制限があります。
    たとえば、hsetキーのパターンが「hash {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」、「name」の2つのフィールドが含まれています。これらのhsetキーを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"
    

    Eureka、ハッシュ{1-3}をIDで並べ替えます。
    SpringRedisを使用してジョブを実行するコードは次のとおりです。

    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. MongoDBでMap/Reduceを使用するにはどうすればよいですか?

    2. PHPを使用してmongodbで認証できません

    3. MongoDBとCodeIgniter

    4. mongodb errnoに接続できません:61接続が拒否されました