Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

295
Visualizações
Caché de primavera, la misma clave en diferentes cachés

Estoy intentando tener dos cachés para almacenar dos elementos diferentes, Usuario y Grupo, con la misma identificación. Espero obtener valores diferentes ya que son dos cachés diferentes. Pero no lo es.

 @Bean public JedisConnectionFactory jedisConnectionFactory() { LOG.debug("redis host: {}, redis port: {}", redisHost, redisPort); JedisConnectionFactory factory = new JedisConnectionFactory(); factory.setUseSsl(true); factory.setHostName(redisHost); factory.setPort(redisPort); factory.setUsePool(true); factory.setPassword(primaryKey); return factory; } /** * * @return */ @Bean(name = "redisTemplate") public RedisTemplate redisTemplate() { RedisTemplate template = new RedisTemplate(); template.setConnectionFactory(jedisConnectionFactory()); return template; } /** * * @return */ @Bean public CacheManager cacheManager() { RedisCacheManager manager = new RedisCacheManager(redisTemplate()); manager.setCacheNames(Arrays.asList("users", "groups")); return manager; } @Cacheable(cacheNames = "users", key = "#id") public User findUserById(String id) { return null; } @Cacheable(cacheNames = "users", key = "#user.id") public User updateUser(User user) { return user; } @Cacheable(cacheNames = "groups", key = "#id") public Group findGroupById(String id) { return null; } @CachePut(cacheNames = "groups", key = "#group.id") public Group updateGroup(Group group) { return group; }

JUn.

 service.removeCaches(); User user = new User(); user.setName("oldUser"); user.setId("1"); // USER assertNull(service.findUserById("1")); service.updateUser(user); User userCached = service.findUserById("1"); LOG.debug(userCached); assertNotNull(userCached); assertEquals(userCached.getName(), "oldUser"); // GROUP assertNull(service.findGroupById("1")); // <== here, im actually getting user instead of null. cache has been cleared before the test starts.

Tal vez entiendo mal el concepto de diferentes cachés aquí. ¿O tal vez la clave debería ser única incluso dentro de diferentes cachés?

Registros

 Results : Tests in error: testCache(TestRedisServiceImpl): User cannot be cast to Group

Básicamente, esto indica que se devuelve un usuario del caché.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

En realidad, CacheManager.setCacheNames() es para proporcionar nombres de alias para el mismo caché , no son dos cachés diferentes. Puedes mirar la API aquí :

void setCacheNames(Colección cacheNames) Especifique el conjunto de nombres de caché para el modo 'estático' de este CacheManager.

Puede pensar que un CacheManager es simplemente como un objeto Map donde una clave almacenará un objeto (como valor) solamente, de modo que cuando intente insertar el segundo objeto con la misma clave, el primer objeto será reemplazado por el segundo objeto.

Entonces, lo que sucede es que el objeto de user en CacheManager se reemplaza con el objeto de group porque ambos están almacenados con la misma clave.

Para hacer que las claves de caché sean únicas en el administrador de caché, puede usar cacheManager.setUsePrefix() para que cada clave tenga el prefijo del nombre de caché respectivo y los valores no se reemplacen.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda