sql >> Databáze >  >> NoSQL >> Redis

Jarní data Redis:Redis Pipeline vždy vrací hodnotu null

Většina vašich otázek je k dispozici v referenční dokumentaci Spring Data Redis.

Než se pustíte do zřetězení, jeden multi-get z jednoho hash nevyžaduje zřetězení, protože je to pouze jeden příkaz. Pipelining nezlepší výkon/stabilitu/… vaší interakce s Redis.

Zřetězení je uspořádáno jako zpětné volání a je určeno k vydávání více příkazů bez okamžitého čekání na výsledek – berte to jako dávku, kde všechny výsledky získáte později. Protože zřetězení synchronizuje odpovědi na samém konci, neobdržíte výsledné hodnoty v rámci zpětného volání, ale až na samém konci, když je relace zřetězení synchronizována a executePipelined(…) končí.

Váš kód by měl spíše vypadat takto:

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

Musíte použít pouze připojení, které obdržíte jako argument zpětného volání, protože připojení vstoupilo do režimu zřetězení. Získání spojení mimo zpětné volání (jako template.getConnectionFactory().getConnection() ) otevře nové připojení a provede příkazy Redis s čekajícími odpověďmi – na žádné externí získané připojení není aplikováno žádné zřetězení.

Můžete také použít metody RedisTemplate místo práce s prostým připojením. executePipelined(…) sváže připojení použité ve zpětném volání k aktuálnímu vláknu a znovu použije toto vázané připojení, pokud zavoláte metody API šablony.

Pokud jde o vaši otázku Lua:Volání kódu/metody nejsou transponována do Lua.




  1. Jak migrovat data v MongoDB

  2. Chyba při připojování k serveru MongoDb Atlas Server

  3. Redis:Jak analyzovat výsledek seznamu

  4. Jak monitorovat Redis jako queue engine pomocí cli podobného beanstalkd?