Spring Redis通过通配符键获取值

时间:2017-05-25 18:35:05

标签: java spring spring-boot redis spring-data

我使用的是Spring Data RedisTemplate(不是Repository)。

一切正常
template.opsForValues().get("mykey:1")

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

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

使用通配符,我想获得" 某些情况"中的所有值,无论它的id是什么。

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

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

2 个答案:

答案 0 :(得分:3)

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");

OR

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

避免使用redis KEYS命令,因为它在执行时会阻止所有redis客户端。扫描并不是更好,如果您分配了密钥,它可能需要数百次往返来重做以扫描整个密钥空间。

答案 1 :(得分:2)

解决方案是使用:

enter image description here

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

您可以执行以下操作:

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

然后查询您的密钥集。

希望这有帮助。