sql >> Database >  >> NoSQL >> Redis

Spring Data Redis:Redis Pipeline retourneert altijd null

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.




  1. MongoDB dropIndex()

  2. Google Cloud Platform - Kan geen verbinding maken met mongodb

  3. Hoe has_many te implementeren:via relaties met Mongoid en mongodb?

  4. Redis gebruiken voor wachtrijen voor meerdere Laravel-applicaties op een enkele server