Spring Redis排序键

前端之家收集整理的这篇文章主要介绍了Spring Redis排序键前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

localhost>Keys *
"1+ { \"_id":"1",\"Name\" : \"C5796\",\"Site\" : \"DRG1\"}"
"2+ { \"_id":"2",\"Name\" : \"CX1XE\",\"Site\" : \"DG1\"}"
"3+ { \"_id":"3",\"Name\" : \"C553\",\"Site\" : \"DG1\"}"

如果我想根据id / name / site进行排序,我该如何在Spring Redis中进行排序?

List

和,

SortQuery

不工作.

最佳答案
代码位于帖子的最后,如果您熟悉redis中多个hset键排序的原理,请跳过以下内容并直接阅读代码.

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”.如果我们想要按其id对这些hset键进行排序.我们应该做什么 ?

首先,添加一个名为“myset”的set键. “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,按其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

运行redisTemplateSort(redisTemplate)的结果(在代码中按名称排序):

hash0 : {"_id": 0,"Name": 59,"Site",60}
hash1 : {"_id": 1,"Name": 37,57}
hash2 : {"_id": 2,"Name": 6,40}
hash3 : {"_id": 3,"Name": 91,58}
hash4 : {"_id": 4,"Name": 39,32}
hash5 : {"_id": 5,"Name": 27,82}
hash6 : {"_id": 6,"Name": 43,10}
hash7 : {"_id": 7,"Name": 17,55}
hash8 : {"_id": 8,"Name": 14,91}
hash9 : {"_id": 9,91}
{"_id": 40,2}
{"_id": 91,8}
{"_id": 55,7}
{"_id": 82,5}
{"_id": 57,1}
{"_id": 32,4}
{"_id": 91,9}
{"_id": 10,6}
{"_id": 60,0}
{"_id": 58,3}
原文链接:https://www.f2er.com/spring/432804.html

猜你在找的Spring相关文章