【问题标题】:how to get both keys and values when using redis's 'keys' command使用redis的'keys'命令时如何获取键和值
【发布时间】:2015-04-09 06:12:29
【问题描述】:

我想同时获取键和值。现在我这样做了:

Set<String> keys = redisTemplate.keys("Tom*");
if (keys != null) {

   //get them one by one
   for (String key : keys) {
      String value = redisTemplate.opsForValue().get(key);
   }
}

首先,我必须得到所有以“abc”开头的键。其次,我一一获取值。

我可以同时获取键和值吗?

更新

谢谢soveran。
我有一些与每个用户相关的属性:

1)Tom.loginTimes=3  
2)Tom.tradeMoneyCount=100 

在我定义两个单独的键之前:Tom.loginTimes 和 Tom.tradeMoneyCount。 现在我想我应该使用 hmset:

10.75.201.3:63790> hmset Tom loginTimes 3 tradeMoneyCount 100
OK
10.75.201.3:63790> hgetall Tom
1) "loginTimes"
2) "3"
3) "tradeMoneyCount"
4) "100"

谢谢。

【问题讨论】:

  • 你不能,但也要确保你阅读了KEYS命令文档中的“警告”说明:redis.io/commands/keys
  • 您能描述一下您的用例吗?也许我们可以想出一个不同的解决方案。
  • 我们想要类似:select * from table_name where column_name like 'abc*'。现在我想知道如何在 redis 中做到这一点。
  • 谢谢soveran。我有一些与每个用户相关的属性:1)Tom.loginTimes=3 2)Tom.tradeMoneyCount=100。在我定义两个单独的键之前:Tom.loginTimes 和 Tom.tradeMoneyCount。现在我想我应该使用 hmset:hmset Tom loginTimes 3 tradeMoneyCount 100。谢谢。

标签: redis spring-data spring-data-redis


【解决方案1】:

hashes 是正确的做法。

至于keys 命令,它是出于调试目的而添加到redis 中的,从未打算在生产中使用。这是来自redis docs for keys command的警告:

警告:KEYS 视为仅应在生产环境中极其小心地使用的命令。它可能会毁掉 对大型数据库执行时的性能。这个命令 用于调试和特殊操作,例如更改 你的键空间布局。不要在常规中使用KEYS 应用程序代码。如果您正在寻找一种在子集中查找键的方法 您的键空间,请考虑使用SCANsets

【讨论】:

【解决方案2】:

您可以使用以下代码同时获取所有键,并返回一组键。我正在使用 Spring Redis API:

public StringBuffer getAllKeys() {

       System.out.println("get all keys");

       StringBuffer sb = new StringBuffer();

       Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes());

       Iterator<byte[]> it = keys.iterator();

       while(it.hasNext()){

           byte[] data = (byte[])it.next();
           sb.append(new String(data, 0, data.length));
              }

       return sb;
    }

【讨论】:

    猜你喜欢
    • 2011-12-26
    • 2018-07-04
    • 2022-06-13
    • 1970-01-01
    • 2020-02-23
    • 1970-01-01
    • 2020-10-02
    • 2017-01-12
    • 1970-01-01
    相关资源
    最近更新 更多