2016-08-29 2 views
0

Wenn ich Spring-Data-Redisis, es über zwei Probleme.Feder-Daten-Redis mit CacheManager

Das erste Problem ist, wenn ich Cache annation verwenden, um Daten zu laden, um Redis, aber ich kann nicht den Wert von redisTemplate erhalten, wird der Code als fließt:

@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 als fließt:

@Cacheable("allUsers") 
public List<UserModel> getAllUsers() { 
    logger.info("execute getAllUsers!"); 
    return Arrays.asList(new UserModel("jason"), new UserModel("david")); 
} 

mein Testcode ist: alle

@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()); 
    } 

und ich die Cache "ALLUSERS" gefunden in redis ist Benutzer ~ Schlüssel, aber ich kann auch keinen Wert mit diesem Schlüssel erhalten, wie kann ich den Wert von redisentemplate erhalten und warum der Schlüssel allUsers ~ keys in redis ist.

Das zweite Problem ist, ich einen Schlüssel aufrufen "mykey" von commond, und setzen Wert "mykey", und ich kann auch nicht null Wert von Java-Code, kann ich Wert durch commond erhalten. Wie ist das? Wenn die beiden Probleme die gleichen sind? Kennt jemand diese? Danke Fortschritt ^. ^.

Update meinen Code Version ist: Feder 4.1.6,
Feder-data-redis 1.7.0,
Jedis 2.8.1
redis 3.2.3

Antwort

0

die RedisTemplate ohne eine RedisSerializer Standardwerte initialisieren die Vorlage, um die JdkSerializationRedisSerializer zu verwenden. Der erzeugte Schlüssel ist also nicht der einfache String Wert, sondern etwas wie \xac\xed\x00\x05t\x00\x0bcache-key-1.

Sie können die StringRedisSerializer als keySerializer verwenden, um einfache String Schlüssel zu haben.

RedisTemplate<String, Object> template = new RedisTemplate<String, Object>(); 
template.setKeySerializer(new StringRedisSerializer()); 
Verwandte Themen