我想要获得键和值。现在我这样做:
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"
感谢。
答案 0 :(得分:1)
hashes是正确的方法。
至于keys命令,它被添加到redis用于调试目的,从未打算用于生产。以下是来自redis docs for keys
command的警告:
警告:将KEYS视为仅应谨慎使用的生产环境中的命令。它可能毁了 对大型数据库执行时的性能。这个命令 用于调试和特殊操作,例如更改 你的键空间布局。不要在常规中使用KEYS 应用代码。如果您正在寻找在子集中查找密钥的方法 您的密钥空间,请考虑使用SCAN或sets。
答案 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;
}