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

Memecahkan masalah

Men-debugging Masalah Korupsi Data #

Masalah yang sulit untuk di-debug adalah jika RedisClient yang sama instance dibagikan di beberapa utas yang dapat menghasilkan pengembalian data yang rusak. Biasanya, ini adalah hasil dari penggunaan IRedisClient bidang dalam instance tunggal atau membagikannya sebagai instance statis. Untuk mencegah hal ini, setiap Thread yang menggunakan Redis harus mengambil klien redis dalam pernyataan using, mis:

using var redis = redisManager.GetClient();
//...

Sayangnya situs panggilan yang mengembalikan respons rusak atau Pengecualian runtime tidak mengidentifikasi di mana lagi instance klien Redis digunakan. Untuk membantu mengidentifikasi di mana instance klien digunakan, Anda dapat menegaskan bahwa klien hanya digunakan di Utas yang menyelesaikannya dari kumpulan dengan:

RedisConfig.AssertAccessOnlyOnSameThread = true;

Ini menangkap Thread's StackTrace setiap kali klien diselesaikan dari kumpulan yang karena menambahkan banyak overhead, hanya boleh diaktifkan saat men-debug masalah koneksi.

Jika itu mendeteksi klien sedang diakses dari utas yang berbeda, itu akan melempar InvalidAccessException dengan pesan yang berisi ID Thread yang berbeda dan StackTrace asli di mana klien diselesaikan dari kumpulan. Anda dapat membandingkannya dengan StackTrace of the Exception untuk mudah-mudahan mengidentifikasi di mana klien digunakan secara tidak benar.

Menghindari masalah Penggunaan Bersamaan #

Apa yang harus diwaspadai dalam basis kode Anda untuk mencegah beberapa penggunaan bersamaan dari IRedisClient contoh:

  • Gunakan IRedisClient redis klien instance dalam using pernyataan
  • Jangan pernah menggunakan instance klien setelah dibuang
  • Jangan pernah menggunakan (atau mengembalikan) "kumpulan atau sumber daya server" (mis. Redis.Lists, lock) setelah klien dibuang
  • Jangan pernah menyimpan Singleton atau static instance ke klien redis (hanya IRedisClientsManager pabrik)
  • Jangan pernah menggunakan klien redis yang sama di beberapa utas, yaitu minta setiap utas menyelesaikan klien mereka sendiri dari pabrik

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menghapus semua yang ada di Redis?

  2. menyebarkan redis ke heroku tidak dapat terhubung

  3. Koneksi Redis melalui soket di Node.js

  4. Batas waktu StackExchange. Redis

  5. Redis sub/pub dan php/nodejs