Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
springredis排序键_Spring_Sorting_Redis_Key - Fatal编程技术网

springredis排序键

springredis排序键,spring,sorting,redis,key,Spring,Sorting,Redis,Key,我在Redis(Spring Data Redis)中有以下键 如果我想根据id/name/site进行排序,我如何在springredis中进行排序 List<Object> keys = redistemplate.sort(SortQueryBuilder.sort("Customer").build()); List key=redistemplate.sort(SortQueryBuilder.sort(“客户”).build()); 以及 SortQuery sort

我在Redis(Spring Data Redis)中有以下键

如果我想根据id/name/site进行排序,我如何在
springredis
中进行排序

List<Object> keys = redistemplate.sort(SortQueryBuilder.sort("Customer").build());
List key=redistemplate.sort(SortQueryBuilder.sort(“客户”).build());
以及

SortQuery sort=SortQueryBuilder.sort(key.noSort().get(field.build());
List key=redistemplate.boundHashOps(key.getOperations().sort(sort);

没有工作。

我不知道spring数据redis。让我给你一个在naive Redis中实现这一点的示例。假设您有一个hash,它包含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结果。类似地,您可以对名称/站点执行此操作。有关在redis中排序的更多信息:

代码位于文章的最后,如果您熟悉redis中多hset键排序的原理,请跳过以下内容并直接阅读代码。

旨在对List/Set/Zset中的字段进行排序,但此方法可用于根据所需的指定度量对多个键进行排序。我们可以使用“排序”按指定字段对多个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”。如果我们想按id对这些hset键进行排序,我们应该怎么做

首先,添加一个名为“myset”的set键。“myset”是一个集合键,它包含成员{“1”、“2”、“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,按其id对哈希{1-3}进行排序。
以下是使用Spring Redis执行此任务的代码:

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

我只想提一下,密钥是散列操作的。localhost>HKeys客户“1+{\”\u id:“1”,“名称”:“C5796”,“站点”:“DRG1\”,“2+{\”\u id:“2”,“名称”:“CX1XE\”,“站点\”:“DG1\”,“3+{\”\u id:“3”,“名称”:“C553\”,“站点\:“DG1\”,谢谢,我目前正在使用spark,一旦完成,我就必须回到这里。我们将检查并接受answer@sel-fish在“按哈希对myset进行排序*->id get hash*->id get hash*->name”的o/p中,有没有一种方法可以打印/获取密钥的名称(比如hash1)?
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"
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;
    }
}
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}