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

Hvorfor er en enkelt Jedis-instans ikke trådsikker?

En enkelt Jedis-instans er ikke trådsikker, fordi den blev implementeret på denne måde. Det er den beslutning, forfatteren af ​​biblioteket har taget.

Du kan tjekke kildekoden til BinaryJedis, som er en super type Jedis https://github.com/xetorthio/jedis/blob/master/src/main/java/redis/clients/jedis/BinaryJedis.java

For eksempel disse linjer:

public Transaction multi() {
    client.multi();
    client.getOne(); // expected OK
    transaction = new Transaction(client);
    return transaction;
}

Som du kan se, er transaktionsfeltet delt for alle tråde, der bruger Jedis-instansen og initialiseret i denne metode. Senere kan denne transaktion bruges i andre metoder. Forestil dig, at to tråde udfører transaktionshandlinger på samme tid. Resultatet kan være, at en transaktion oprettet af en tråd utilsigtet tilgås af en anden tråd. Transaktionsfeltet i dette tilfælde er delt tilstandsadgang, som ikke er synkroniseret. Dette gør Jedis ikke-trådsikker.

Grunden til, at forfatteren besluttede at gøre Jedis non-threadsafe og JedisPool threadsafe, kan være for at give fleksibilitet til klienter, så hvis du har et enkelt-tråds miljø, kan du bruge Jedis og få bedre ydeevne, eller hvis du har et multithreaded miljø, du kan bruge JedisPool og få trådsikkerhed.




  1. Er Mongodb Aggregation framework hurtigere end kort/reducer?

  2. MongoDB:undtagelse i initAndListen:20 Forsøgte at oprette en låsefil på en skrivebeskyttet mappe:/data/db, afsluttende

  3. Hvordan opdaterer/upsætter jeg et dokument i Mongoose?

  4. Bringer MongoDB til produktion