英文:
Spring boot @RedisHash creates multiple keys instead of one
问题
我正在使用 spring-data-redis
来向 Redis 中添加和检索数据。但一旦数据写入到 Redis 中,我可以看到多个键而不是一个。只有在过期时才会删除一个键,其余的键仍然存在于 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 *
命令时,我可以看到以下键:
- "vault_token:1"
- "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel:1:phantom"
- "vault_token:1:phantom"
- "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel"
- "vault_token"
并且在设置 timeToLive
后,如果我再次运行相同的命令,我可以看到:
- "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel:1:phantom"
- "vault_token:1:phantom"
- "com.highpeak.tlp.attributemanager.db.model.VaultTokenModel"
- "vault_token"
这些附加的键是什么,为什么它们以完整的包名称和随机唯一标识符 "phantom" 创建?
谢谢。
英文:
I am using spring-data-redis
to add and retrieve data fro Redis. But once the data is written to the redis, I can see multiple keys instead of one. On expiration only 1 key is getting removed and rest of the keys are still present in Redis.
@RedisHash( timeToLive = 60, value="vault_token" )
@Data
public class VaultTokenModel {
private Integer id;
private String token;
}
To save,
VaultTokenModel vaultTokenModel = new VaultTokenModel();
vaultTokenModel.setId(1);
vaultTokenModel.setToken(getVaultToken());
VaultTokenModel savedToken = vaultTokenRepository.save(vaultTokenModel);
return savedToken.getToken();
But when I open the redis-cli
and run KEYS *
, I can see,
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"
And after the set timeToLive
, if I run the same command again, I can see,
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"
What are these additional keys and why are they getting created with full package name and with a random unique identifier phantom
.
Thank You
答案1
得分: 1
这些多个键由Spring Data Redis维护,只是一些元信息。
如果你感兴趣,你可以在redis命令中输入
type [whatever-key]
来查找键的类型,然后发出相应的get命令。
例如,如果
type vault_token
返回结果为哈希,
那么你可以使用
hgetall vault_token
查看里面的内容。
你看到的幻象是Spring Data Redis缓存的一些信息,一段时间后将被删除。更多信息,请查看https://stackoverflow.com/questions/46467965/delete-key-value-from-redis-phantom-key-not-deleted
英文:
These multiple keys are maintained by Spring Data Redis, just some meta info.
If you're curious, you can issue
type [whatever-key]
in the redis command, to find the type of the key, then issue a corresponding get command.
For example, if
type vault_token
returns the result as hash,
then you use
hgetall vault_token
to look at what's inside.
The phantom thing you see is just some info cached by Spring Data Redis and will be deleted after a while. For more info, check https://stackoverflow.com/questions/46467965/delete-key-value-from-redis-phantom-key-not-deleted
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论