De meeste van uw vragen zijn beschikbaar in de Spring Data Redis-referentiedocumentatie.
Voordat je je verdiept in Pipelining, vereist een enkele multi-get van één hash geen Pipelining omdat het slechts een enkele opdracht is. Pipelining zal de prestaties/stabiliteit/... van uw Redis-interactie niet verbeteren.
Pipelining is ingericht als callback en bedoeld om meerdere opdrachten uit te geven zonder het resultaat onmiddellijk af te wachten - beschouw het als een batch waarin u alle resultaten later krijgt. Omdat pipelining reacties helemaal aan het einde synchroniseert, ontvangt u geen resultaatwaarden binnen de callback, maar helemaal aan het einde, wanneer de pipelining-sessie wordt gesynchroniseerd en executePipelined(…)
eindigt.
Uw code zou er eerder zo uit moeten zien:
List<Object> results = getRedisTemplate().executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) {
connection.hMGet(key.getBytes(), params);
return null;
}
});
List<Object> hmget = (List<Object>) results.get(0);
U hoeft alleen de verbinding te gebruiken die u als callback-argument ontvangt, omdat de verbinding in de pipelining-modus is gegaan. Een verbinding verkrijgen van buiten de callback (zoals template.getConnectionFactory().getConnection()
) opent een nieuwe verbinding en voert Redis-commando's uit met wachtende reacties - er wordt geen pipelining toegepast op externe verkregen verbindingen.
U kunt ook de methoden van RedisTemplate
. gebruiken in plaats van met de gewone verbinding te werken. executePipelined(…)
bindt de verbinding die wordt gebruikt in de callback aan de huidige thread en hergebruikt die gebonden verbinding als u sjabloon-API-methoden aanroept.
Wat betreft uw Lua-vraag:de code-/methodeaanroepen worden niet omgezet naar Lua.