Spring Redis 通过通配符键获取值

问题描述 投票:0回答:2

我正在使用 Spring Data RedisTemplate (不是存储库)。一切正常

template.opsForValues().get("mykey:1")

但我有一些更复杂的键,例如“myobject:somesituation:1”和“myobject:anothersituation:2”等。我需要做类似的事情:

template.opsForValues().get("myobject:somesituation:*")

使用通配符,我想获取“somesituation”中的所有值,无论它的id是什么。

使用redis命令行,没有问题。

观察:我正在使用反应式模板,不知道(相信)这是否是问题所在。 Obs2:经过研究,我刚刚找到了有关 Spring Repository、获取所有密钥、通过命令行获取等的帖子。但不是关于我的具体问题。

java spring spring-boot redis spring-data
2个回答
4
投票

解决方案是使用:

在红色矩形中,我标记了您应该使用的方法来实现您的目标。

你可以这样做:

Set<String> keys = template.keys("myobject:somesituation:*")

然后查询您的一组密钥。

希望这有帮助。


4
投票

Redis 哈希可以更好地对您的数据进行建模吗? https://redis.io/topics/data-types

而不是顶级按键

myobject:somesituation:1
myobject:somesituation:2
myobject:somesituation:3

在顶层你有一把钥匙

myobject:somesituation

并且值本身具有键/值对

Object value = template.opsForHash().get("myobject:somesituation", "1");

或者,获取所有值

Map<Object,Object> map = template.opsForHash().entries("myobject:somesituation");
value = map.get("1");

避免使用 redis KEYS 命令,因为它在执行时会阻止所有 redis 客户端。 SCAN 也好不了多少,如果您分配了密钥,则可能需要数百次往返 redis 才能扫描整个密钥空间。

© www.soinside.com 2019 - 2024. All rights reserved.