私は同じIDを持つ2つの異なるアイテム、ユーザーとグループを格納するために2つのキャッシュを用意しようとしています。私は2つの異なるキャッシュであるので、私は異なる値を得なければならないと思います。そうではありません。スプリングキャッシュ、異なるキャッシュの同じキー
@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;
}
JUnit。
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.
多分私はここで異なるキャッシュの概念を誤解しています。または、異なるキーキャッシュ内でもキーが一意である必要がありますか?
ログ
Results :
Tests in error:
testCache(TestRedisServiceImpl): User cannot be cast to Group
これは基本的に、ユーザーがキャッシュから返されることを示しています。
なぜあなたはグループではなくユーザーを取得していると思いますか?それを示すログはありますか? – reos
あなたのコードは不完全です...あなたのJUnitの完全なコードを投稿できますか? – developer
ログを追加します。 @reos – Joseph