当我使用spring-data-redis时,它遇到了两个问题。
第一个问题是,当我使用缓存声明将数据加载到redis时,但我无法通过redisTemplate获得值,代码为流:
@Bean
RedisTemplate<Object, Object> redisTemplate() {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
redisTemplate.setConnectionFactory(jedisConnectionFactory());
return redisTemplate;
}
@Bean
public RedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName("localhost");
factory.setPort(6379);
factory.setUsePool(true);
return factory;
}
@Bean
CacheManager cacheManager() {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate());
cacheManager.setDefaultExpiration(86400);
return cacheManager;
}UserService as flows:
@Cacheable("allUsers")
public List<UserModel> getAllUsers() {
logger.info("execute getAllUsers!");
return Arrays.asList(new UserModel("jason"), new UserModel("david"));
}我的测试代码是:
@Test
public void testCache() {
redisTemplate.delete("allUsers");
userService.getAllUsers(); // load user data
List<Object> users = redisTemplate.opsForList().range("allUsers", 0, -1); // get allUsers from redis
logger.info("get from template");
for(Object user : users) {
logger.info(((UserModel)user).getUsername());
}
logger.info("get from service");
for(UserModel user : userService.getAllUsers()) {
logger.info(user.getUsername());
}而且,我发现redis中的缓存"allUsers“是allUsers~ key,但我也不能通过这个键获取值,我如何通过redisTemplate获取值,以及为什么这个键是redis中的allUsers~ key。
第二个问题是我通过commond设置了一个key调用"mykey",并设置了"mykey“的值,而且我也不能通过java代码得到空值,我可以通过commond得到值。怎么会这样呢?如果这两个问题是同一个问题呢?有人知道这些吗?感谢您提前^。^。
更新我的代码版本是: spring 4.1.6,
spring-data-redis 1.7.0,
Jedis 2.8.1
redis 3.2.3
发布于 2016-08-31 14:46:37
在不使用RedisSerializer的情况下初始化RedisTemplate会默认模板使用JdkSerializationRedisSerializer。因此,生成的键不是普通的String值,而是类似于\xac\xed\x00\x05t\x00\x0bcache-key-1的值。
您可以使用StringRedisSerializer作为keySerializer来拥有普通的String密钥。
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setKeySerializer(new StringRedisSerializer());https://stackoverflow.com/questions/39207450
复制相似问题