Redis
 sql >> база данни >  >> NoSQL >> Redis

Spring Data Redis:Redis Pipeline връща винаги нула

Повечето от вашите въпроси са достъпни в справочната документация на Spring Data Redis.

Преди да се задълбочите в Pipelining, едно множествено получаване от един Hash не изисква Pipelining, защото това е само една команда. Конвейерирането няма да подобри производителността/стабилността/... на вашето взаимодействие с Redis.

Конвейерът е подреден като обратно извикване и има за цел да издаде множество команди, без да чакате резултата незабавно – мислете за него като за пакет, където получавате всички резултати по-късно. Тъй като конвейерирането синхронизира отговорите в самия край, вие не получавате стойности на резултата в рамките на обратното извикване, а в самия край, когато сесията на конвейер е синхронизирана и executePipelined(…) прекратява.

Вашият код по-скоро трябва да изглежда така:

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

Трябва да използвате само връзката, която получавате като аргумент за обратно извикване, тъй като връзката е влязла в режим на конвейериране. Получаване на връзка извън обратното извикване (като template.getConnectionFactory().getConnection() ) ще отвори нова връзка и ще изпълни команди на Redis с изчакващи отговори – не се прилага конвейер за никоя външна получена връзка.

Можете също да използвате методи на RedisTemplate вместо да работите с обикновената връзка. executePipelined(…) свързва връзката, използвана в обратното извикване, към текущата нишка и използва повторно тази обвързана връзка, ако извикате шаблонни API методи.

Относно вашия Lua въпрос:Извикванията на код/метод не се транспонират в Lua.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Разделете низ от символ в Lua

  2. Къде е директорията с данни в Redis?

  3. doRedis връща грешки в Windows 8 x64 за различни компилации на Redis сървър

  4. Redis Sentinels в същите сървъри като главен/подчинен?

  5. Как да разположа node.js с redis на kubernetes?