Spring boot 使用restTemplate检查redis键是散列还是字符串

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[

我有由散列和字符串组成的Redis DB

我使用以下代码从DB获得了所有密钥:

        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问题的一个答案中提到)。在生产环境中,扫描通常更好,因为它不会尝试一次获取并返回所有密钥