Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

292
Views
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é.

about 4 years ago · Santiago Trujillo
1 answers
Answer question

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.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!