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\"}"

如果要根据 进行排序,该怎么做Spring Redis

List<Object> keys = redistemplate.sort(SortQueryBuilder.sort("Customer").build());

和,

SortQuery<String> sort = SortQueryBuilder.sort(key).noSort().get(field).build(); 

List<?> keys = redistemplate.boundHashOps(key).getOperations().sort(sort);

不工作。

回答:

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”的设置键。“ 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}进行排序。

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}

以上是 Spring Redis排序键 的全部内容, 来源链接: utcz.com/qa/425680.html

回到顶部