如何在使用redis的密钥时获得密钥和值。命令

时间:2015-04-09 06:12:29

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

我想要获得键和值。现在我这样做:

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"

感谢。

2 个答案:

答案 0 :(得分:1)

hashes是正确的方法。

至于keys命令,它被添加到redis用于调试目的,从未打算用于生产。以下是来自redis docs for keys command的警告:

  

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

答案 1 :(得分: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;
    }