Je souhaite récupérer plusieurs valeurs hashmap avec seulement des champs spécifiés. J'ai donc opté pour le pipeline Redis. Pendant le test du code ci-dessous, je vois redisResponse1
est toujours nulle, où redisResponse2
a une valeur.Redis Redis: Redis Pipeline toujours null
getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
List<byte[]> redisResponse1 = connection.hMGet(key.getBytes(), params);
List<byte[]> redisResponse2 = getRedisTemplate().getConnectionFactory().getConnection().hMGet(key.getBytes(), specificParams);
return null;
}
});
Quand je regarde dans le code et a constaté que ci-dessous, où
a) redisResponse2
n'est pas exécutée avec l'option pipeline
b) redisResponse1
est exécuté avec pipeline (isPipelined() == true) mais revenant toujours nul.
public List<byte[]> hMGet(byte[] key, byte[]... fields) {
try {
if (isPipelined()) {
pipeline(new JedisResult(pipeline.hmget(key, fields)));
return null;
}
if (isQueueing()) {
transaction(new JedisResult(transaction.hmget(key, fields)));
return null;
}
return jedis.hmget(key, fields);
} catch (Exception ex) {
throw convertJedisAccessException(ex);
}
}
Autant de questions sont
1) Comment puis-je obtenir mon cas d'utilisation avec l'option de pipeline?
2) Quel est l'impact d'accéder à getRedisTemplate().getConnectionFactory().getConnection()
dans ce RedisCallback?
3) Comment ce concept de pipeline fonctionne-t-il? Est-ce que c'est comme Lua dynamique? où ce code Java est converti en script Lua et envoyé à Redis en tant que script, exécuté en Redis et revenir? Surpris dans ce rappel; le code accède/met également à jour les variables de classe externes, alors qu'adviendra-t-il de toutes ces variables? Toutes ces variables de classe externe envoient aussi à redis in lua?
4) Je vois beaucoup d'exemples sur doInRedis
API retourne null
; Pourquoi ça? Comment retourner/obtenir un objet valide à partir de cela?
En utilisant spring-data-redis-1.6.6.RELEASE.jar –