加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Spring Redis排序键

发布时间:2020-12-15 01:50:27 所属栏目:大数据 来源:网络整理
导读:我在Redis(Spring Data Redis)中有以下键, localhostKeys *"1+ { "_id":"1","Name" : "C5796","Site" : "DRG1"}""2+ { "_id":"2","Name" : "CX1XE","Site" : "DG1"}""3+ { "_id":"3","Name" : "C553","Site" : "DG1"}" 如果我想

我在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}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读