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

Python &Redis:Praktik terbaik aplikasi Manajer/Pekerja

Masalah Anda adalah Anda mencoba menjalankan beberapa perintah secara bersamaan dengan satu koneksi redis.

Anda mengharapkan sesuatu seperti

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
command      
             LLEN test
             0

tetapi Anda mendapatkan

Thread 1     Thread 2
LLEN test    
1                            
LPOP test   
             LLEN test
             command
0

Hasilnya kembali dalam urutan yang sama, tetapi tidak ada yang menghubungkan utas atau perintah ke hasil tertentu. Koneksi redis individual tidak aman untuk utas - Anda akan membutuhkannya untuk setiap utas pekerja.

Anda juga dapat melihat masalah serupa jika Anda menggunakan pipelining secara tidak tepat - ini dirancang hanya untuk menulis skenario seperti menambahkan banyak item ke daftar, di mana Anda dapat meningkatkan kinerja dengan mengasumsikan LPUSH berhasil daripada menunggu server memberi tahu Anda bahwa itu berhasil setelah setiap barang. Redis akan tetap mengembalikan hasilnya, tetapi belum tentu merupakan hasil dari perintah terakhir yang dikirim.

Selain itu, pendekatan dasarnya masuk akal. Ada beberapa peningkatan yang bisa Anda lakukan:

  • Daripada memeriksa panjangnya, gunakan saja LPOP non-blocking - jika mengembalikan null, daftarnya kosong
  • Tambahkan timer sehingga jika daftar kosong akan menunggu daripada hanya mengeluarkan perintah lain.
  • Sertakan cek pembatalan dalam kondisi while loop
  • Menangani kesalahan koneksi - Saya menggunakan pengaturan loop luar sehingga jika koneksi gagal, pekerja akan mencoba menyambung kembali (pada dasarnya memulai ulang utama ) untuk sejumlah upaya yang wajar sebelum menghentikan proses pekerja sama sekali.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengatur Redis di namespace khusus sebagai cache dan MQ pada aplikasi web ServiceStack menggunakan Structuremap

  2. Redis dan Node.js dan Socket.io Pertanyaan

  3. Memulai dengan Redis Client API

  4. Pengumpulan Koneksi Redis Node.js

  5. Area Notifikasi dan Berita dengan menggunakan Redis