当前位置: 首页 > 知识库问答 >
问题:

spring boot@redishash创建多个键而不是一个键

轩辕亮
2023-03-14

我正在使用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并运行键*时,我可以看到,

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创建这些密钥。

谢谢

共有1个答案

卫开济
2023-03-14

这些多个密钥由spring数据Redis维护,只是一些元信息。如果你好奇,你可以发布

type [whatever-key]

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

type vault_token

以哈希形式返回结果,然后使用

hgetall vault_token

看看里面是什么。

你看到的幻影只是spring数据Redis缓存的一些信息,过一段时间就会被删除。有关更多信息,请选中delete key/value from redis-phantom key not deleted

 类似资料:
  • > Docker不是我的强项所以请容忍我 我正在使用docker和docker compose为Magento2创建本地开发环境(https://github.com/victortodoran/magento2-docker) 我创建了一个自定义网络,将静态IP分配给容器。 摘自docker compose。yml(https://github.com/victortodoran/magento

  • 我试图在两个表之间创建一个外键约束,但在执行alter命令之后,mysql创建了索引而不是外键。 我使用的是hibernate,所以最初我认为这是hibernate的问题,但当我直接在mysql上执行查询时,行为是一样的。 更改表person添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id) 运行此命令后,我会在mysql数据

  • 所以基本上我在java中做一个服务器和客户端。 为了让它运行,我必须同时运行client.java和server.java.我需要关闭一个或两个取决于实例 我目前需要的是这样一种方式:当客户端传递参数x时,客户端应该关闭,但服务器应该保持打开。我还必须以这样一种方式实现它:如果客户端传递参数y,那么客户端和服务器都应该关闭 我想做: 但我不确定这是否会同时关闭服务器和客户端,这意味着它对第二个实例

  • 我无法得到为什么appcompat_v7是自动创建的…发现它很烦人…请有人帮助摆脱这个问题。我试图创建新项目,发现每个新创建的项目都是这样的。

  • 问题内容: 我需要一次创建多个表。我很难找出正确的方法来完成此任务。目前,我的脚本如下所示: 显然,这是行不通的,并且不会创建任何表。有一种简单的方法可以一次创建多个表吗? 问题答案: MySQL变得令人困惑,因为您没有划定查询范围。在第一条语句后添加分号: 另外,根据Heredoc文档,请确保位于行的开头, 没有其他字符,除了分号外 。 鉴于上述方法似乎无效,请尝试以下代码: 您 可以 使用(M

  • 我有两个版本的应用程序: > 没有广告。 我的应用程序中有订阅。我想在这些应用程序之间共享一个订阅。例如这样一个场景: 用户在应用程序中购买带有广告的订阅,然后购买没有广告的应用程序。我想将第一个应用程序中的订阅分享给第二个应用程序。有没有可能使用标准的谷歌账单库?