【问题标题】:Spring Redis Get Values by Wildcard KeysSpring Redis 通过通配符键获取值
【发布时间】:2017-10-26 12:30:10
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    解决方法是使用:

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

    你可以这样做:

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

    然后查询你的键集。

    希望这会有所帮助。

    【讨论】:

    【解决方案2】:

    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 来扫描整个键空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 2013-08-22
      • 2015-11-05
      • 2022-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多