Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Mengapa Satu instance Jedis tidak threadsafe?

Sebuah instance Jedis tidak threadsafe karena diimplementasikan dengan cara ini. Itulah keputusan yang dibuat oleh penulis perpustakaan.

Anda dapat memeriksa kode sumber BinaryJedis yang merupakan tipe super Jedis https://github.com/xetorthio/jedis/blob/master/src/main/java/redis/clients/jedis/BinaryJedis.java

Misalnya baris berikut:

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

Seperti yang Anda lihat, bidang transaksi dibagikan untuk semua utas menggunakan instance Jedis dan diinisialisasi dalam metode ini. Nantinya transaksi ini bisa digunakan di metode lain. Bayangkan dua utas melakukan operasi transaksional pada saat yang bersamaan. Hasilnya mungkin transaksi yang dibuat oleh satu utas secara tidak sengaja diakses oleh utas lain. Bidang transaksi dalam hal ini adalah akses status bersama yang tidak disinkronkan. Hal ini membuat Jedis menjadi non-threadsafe.

Alasan mengapa penulis memutuskan untuk membuat Jedis non-threadsafe dan JedisPool threadsafe mungkin untuk memberikan fleksibilitas bagi klien sehingga jika Anda memiliki lingkungan single-threaded Anda dapat menggunakan Jedis dan mendapatkan kinerja yang lebih baik atau jika Anda memiliki lingkungan multithreaded Anda dapat menggunakan JedisPool dan dapatkan keamanan utas.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis:Apakah ZADD lebih baik daripada O(logN) ketika elemen yang dimasukkan berada di awal atau akhir?

  2. Cara menggunakan SCAN dengan opsi MATCH di Predis

  3. Pengumpulan Koneksi Redis Node.js

  4. Dapatkan semua kunci dalam database Redis dengan python

  5. Node.js - Sesi tidak bertahan melalui res.redirect()