我在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.sort(key).noSort().get(field).build();
List> keys = redistemplate.boundHashOps(key).getoperations().sort(sort);
不工作.
最佳答案
代码位于帖子的最后,如果您熟悉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.sort(sortKey).by("hash*->Name")
.get("hash*->_id").get("hash*->Name").get("hash*->Site").build();
Liststemplate.sort(sortQuery);
for (int i = 0; i < sortRslt.size(); ) {
System.out.printf("{\"_id\": %s,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,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}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。