Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Spring Data Redis:Redis Pipeline zwraca zawsze wartość null

Większość Twoich pytań jest dostępna w dokumentacji referencyjnej Spring Data Redis.

Przed zagłębieniem się w Pipelining, pojedynczy multi-get z jednego Hash nie wymaga Pipelining, ponieważ jest to tylko pojedyncze polecenie. Potokowanie nie poprawi wydajności/stabilności/… interakcji z Redis.

Pipelining jest zorganizowany jako wywołanie zwrotne i ma na celu wydawanie wielu poleceń bez natychmiastowego oczekiwania na wynik – pomyśl o tym jako o partii, w której później otrzymujesz wszystkie wyniki. Ponieważ potokowanie synchronizuje odpowiedzi na samym końcu, nie otrzymujesz wartości wyników w ramach wywołania zwrotnego, ale na samym końcu, gdy sesja potokowania jest zsynchronizowana i executePipelined(…) kończy się.

Twój kod powinien wyglądać tak:

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

Musisz użyć tylko połączenia, które otrzymasz jako argument wywołania zwrotnego, ponieważ połączenie weszło w tryb potoku. Uzyskiwanie połączenia spoza wywołania zwrotnego (np. template.getConnectionFactory().getConnection() ) otworzy nowe połączenie i wykona polecenia Redis z oczekiwaniem na odpowiedzi – żadne potokowanie nie jest stosowane do żadnego zewnętrznego uzyskanego połączenia.

Możesz także użyć metod RedisTemplate zamiast pracować z prostym połączeniem. executePipelined(…) wiąże połączenie używane w wywołaniu zwrotnym z bieżącym wątkiem i ponownie wykorzystuje to powiązane połączenie, jeśli wywołasz metody interfejsu API szablonu.

Odnośnie twojego pytania Lua:Wywołania kodu/metody nie są transponowane do Lua.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Seler/Redis to samo zadanie wykonywane wiele razy równolegle

  2. Jak zadzwonić do BGSAVE z BookSleeve?

  3. Czy dwa moduły powinny używać tego samego połączenia redis? (pracuję z Flask)

  4. Wprowadzenie do struktur danych Redis:skróty

  5. Czy powinienem zawsze używać potoku, gdy w Redis jest więcej niż 1 polecenie?