微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Boot @RedisHash创建多个密钥而不是一个

如何解决Spring Boot @RedisHash创建多个密钥而不是一个

我正在使用spring-data-redis从Redis添加和检索数据。但是,一旦将数据写入Redis,我可以看到多个密钥而不是一个。到期后,只有1个密钥会被删除,其余的密钥仍存在于Redis中。

@RedisHash( timetoLive = 60,value="vault_token" )
@Data
public class VaultTokenModel {

    private Integer id;

    private String token;
}

要保存,

VaultTokenModel vaultTokenModel = new VaultTokenModel();
                vaultTokenModel.setId(1);
                vaultTokenModel.setToken(getVaultToken());
                VaultTokenModel savedToken = vaultTokenRepository.save(vaultTokenModel);
                return savedToken.getToken();

但是当我打开redis-cli并运行KEYS *时,我可以看到

1) "vault_token:1"
2) "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel:1:phantom"
3) "vault_token:1:phantom"
4) "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel"
5) "vault_token"

在设置timetoLive之后,如果我再次运行相同的命令,我会看到,

1) "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel:1:phantom"
2) "vault_token:1:phantom"
3) "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel"
4) "vault_token"

这些附加键是什么,为什么要使用完整的程序包名称随机的唯一标识符phantom创建它们。

谢谢

解决方法

这些多个键由Spring Data Redis维护,仅包含一些元信息。 如果您好奇,可以发出

type [whatever-key]
在redis命令中

查找密钥的类型,然后发出相应的get命令。 例如,如果

type vault_token

将结果返回为哈希, 然后您使用

hgetall vault_token

看看里面有什么。

您看到的幻像只是Spring Data Redis缓存的一些信息,过一会儿就会被删除。有关更多信息,请检查delete key/value from redis - phantom key not deleted

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。