Spring boot 使用restTemplate检查redis键是散列还是字符串
我有由散列和字符串组成的Redis DB 我使用以下代码从DB获得了所有密钥:Spring boot 使用restTemplate检查redis键是散列还是字符串,spring-boot,redis,Spring Boot,Redis,我有由散列和字符串组成的Redis DB 我使用以下代码从DB获得了所有密钥: Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes()); Iterator<byte[]> it = keys.iterator(); while(it.hasNext()){ byte[
Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes());
Iterator<byte[]> it = keys.iterator();
while(it.hasNext()){
byte[] data = (byte[])it.next();
String key = (new String(data, 0, data.length));
System.out.println(key);
}
Set keys=redisTemplate.getConnectionFactory().getConnection().keys(“*”.getBytes());
Iterator it=keys.Iterator();
while(it.hasNext()){
字节[]数据=(字节[])it.next();
字符串键=(新字符串(data,0,data.length));
系统输出打印项次(键);
}
从这里开始:
由于密钥可以是散列或字符串,因此如何确定何时可以使用opsForHash和opsForValue,即如何使用restemplate在spring boot中检查它是散列还是字符串获取密钥类型的Redis命令是
type
:
您可以使用RedisTemplate的公共数据类型(K键)
方法执行以下操作:
下面是一个例子:
Set<byte[]> keys = redisTemplate.getConnectionFactory().getConnection().keys("*".getBytes());
Iterator<byte[]> it = keys.iterator();
while(it.hasNext()){
byte[] data = (byte[])it.next();
String key = (new String(data, 0, data.length));
DataType type = redisTemplate.type(key);
if (type == DataType.HASH) {
// ...
} else if (type == DataType.STRING) {
// ...
}
}
Set keys=redisTemplate.getConnectionFactory().getConnection().keys(“*”.getBytes());
Iterator it=keys.Iterator();
while(it.hasNext()){
字节[]数据=(字节[])it.next();
字符串键=(新字符串(data,0,data.length));
DataType type=redisTemplate.type(key);
if(type==DataType.HASH){
// ...
}else if(type==DataType.STRING){
// ...
}
}
编辑:还有一条建议是,您可能希望使用扫描
而不是键*
(在您链接的SO问题的一个答案中提到)。在生产环境中,扫描通常更好,因为它不会尝试一次获取并返回所有密钥