我正在使用 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、获取所有密钥、通过命令行获取等的帖子。但不是关于我的具体问题。
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 才能扫描整个密钥空间。