1

我想同时获得 key 和 values 。现在我这样做:

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”开头的键。其次,我一一获取值。

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

更新

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

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"

谢谢。

4

2 回答 2

1

哈希是正确的方法。

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

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

于 2015-04-09T09:17:35.397 回答
1

您可以使用以下代码同时获取所有键,并返回一组键。我正在使用 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;
    }
于 2015-09-08T21:19:01.407 回答