sql >> Database teknologi >  >> NoSQL >> Redis

Spring Data Redis:Redis Pipeline returnerer altid null

De fleste af dine spørgsmål er tilgængelige i Spring Data Redis referencedokumentation.

Før du graver i Pipelining, kræver en enkelt multi-get fra en Hash ikke Pipelining, fordi det kun er en enkelt kommando. Pipelining forbedrer ikke ydeevne/stabilitet/... af din Redis-interaktion.

Pipelining er arrangeret som tilbagekald og beregnet til at udstede flere kommandoer uden at afvente resultatet med det samme - tænk på det som en batch, hvor du får alle resultater senere. Fordi pipelining synkroniserer svar til allersidst, modtager du ikke resultatværdier i tilbagekaldet, men til allersidst, når pipelining-sessionen er synkroniseret og executePipelined(…) afsluttes.

Din kode skal hellere se sådan ud:

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);

Du skal kun bruge den forbindelse, du modtager som tilbagekaldsargument, fordi forbindelsen er gået i pipelining-tilstand. Opnåelse af en forbindelse uden for tilbagekaldet (som template.getConnectionFactory().getConnection() ) vil åbne en ny forbindelse og udføre Redis-kommandoer med afventende svar – ingen pipelining anvendes på nogen ekstern opnået forbindelse.

Du kan også bruge metoder til RedisTemplate i stedet for at arbejde med den almindelige forbindelse. executePipelined(…) binder forbindelsen, der bruges i tilbagekaldet, til den aktuelle tråd og genbruger den bundne forbindelse, hvis du kalder template API-metoder.

Med hensyn til dit Lua-spørgsmål:Kode-/metodekaldene transponeres ikke til Lua.




  1. mongoose save vs insert vs create

  2. Integrer Redis til JHipster CacheConfiguration fejl

  3. Hvad er brugen af ​​filen mongo.lock?

  4. Overløbssorteringstrins bufret dataforbrug overstiger intern grænse