sql >> Databasteknik >  >> NoSQL >> Redis

Spring Data Redis:Redis Pipeline returnerar alltid null

De flesta av dina frågor finns i Spring Data Redis referensdokumentation.

Innan du gräver i Pipelining kräver en enda multi-get från en Hash inte Pipelining eftersom det bara är ett enda kommando. Pipelining kommer inte att förbättra prestanda/stabilitet/... av din Redis-interaktion.

Pipelining är arrangerad som callback och avsedd att utfärda flera kommandon utan att invänta resultatet omedelbart – se det som en batch där du får alla resultat senare. Eftersom pipelining synkroniserar svar i slutet, får du inte resultatvärden inom callbacken utan i slutet, när pipelining-sessionen är synkroniserad och executePipelined(…) avslutas.

Din kod borde snarare se ut så här:

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 måste bara använda anslutningen som du får som återuppringningsargument eftersom anslutningen har gått in i pipelining-läge. Få en anslutning utanför återuppringningen (som template.getConnectionFactory().getConnection() ) kommer att öppna en ny anslutning och köra Redis-kommandon med väntande svar – ingen pipelining tillämpas på någon extern erhållen anslutning.

Du kan också använda metoder för RedisTemplate istället för att arbeta med den vanliga anslutningen. executePipelined(…) binder anslutningen som används i återuppringningen till den aktuella tråden och återanvänder den bundna anslutningen om du anropar mall-API-metoder.

Angående din Lua-fråga:Kod-/metodanropen överförs inte till Lua.




  1. Mongodb $push i kapslad array

  2. Ring lagrad funktion i mongodb

  3. Mongoose/node.js hur man hittar, fyller på, gör saker, "avfolkar" och uppdaterar

  4. Redis:möjligt att förfalla ett element i en array eller sorterad uppsättning?