Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Khắc phục sự cố

Gỡ lỗi Sự cố Tham nhũng Dữ liệu #

Một vấn đề có thể khó gỡ lỗi là nếu RedisClient giống nhau cá thể được chia sẻ trên nhiều luồng có thể dẫn đến việc trả về dữ liệu bị hỏng. Thông thường, đây là kết quả của việc sử dụng IRedisClient trường trong một trường hợp singleton hoặc chia sẻ nó dưới dạng một trường hợp tĩnh. Để ngăn chặn điều này, mỗi Chủ đề sử dụng Redis phải truy xuất ứng dụng khách redis trong một câu lệnh using, ví dụ:

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

Thật không may, trang web cuộc gọi trả về phản hồi bị hỏng hoặc Ngoại lệ thời gian chạy không xác định được nơi nào khác phiên bản ứng dụng khách Redis đang được sử dụng. Để giúp xác định nơi các phiên bản máy khách đang được sử dụng, bạn có thể khẳng định rằng máy khách chỉ được sử dụng trong Chuỗi đã giải quyết nó từ nhóm với:

RedisConfig.AssertAccessOnlyOnSameThread = true;

Điều này nắm bắt StackTrace của Chủ đề mỗi khi máy khách được giải quyết khỏi nhóm vì nó thêm nhiều chi phí, chỉ nên được bật khi gỡ lỗi các sự cố kết nối.

Nếu nó phát hiện thấy máy khách đang được truy cập từ một chuỗi khác, nó sẽ ném ra một InvalidAccessException với tin nhắn chứa Id chuỗi khác nhau và StackTrace gốc nơi khách hàng đã được giải quyết từ nhóm. Bạn có thể so sánh điều này với StackTrace of the Exception để hy vọng xác định vị trí khách hàng đang được sử dụng không đúng cách.

Tránh các vấn đề về Sử dụng Đồng thời #

Cần lưu ý những gì trong cơ sở mã của bạn để ngăn chặn việc sử dụng đồng thời nhiều IRedisClient ví dụ:

  • Sử dụng IRedisClient redis instance client trong using tuyên bố
  • Không bao giờ sử dụng phiên bản máy khách sau khi nó đã được xử lý
  • Không bao giờ sử dụng (hoặc trả lại) "bộ sưu tập hoặc tài nguyên máy chủ" (ví dụ:Redis.Lists, khóa) sau khi máy khách đã được xử lý
  • Không bao giờ giữ một Singleton hoặc static đối với ứng dụng khách redis (chỉ IRedisClientsManager nhà máy)
  • Không bao giờ sử dụng cùng một ứng dụng khách redis trong nhiều luồng, tức là mỗi luồng giải quyết ứng dụng khách của chính chúng từ nhà máy

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để phát hành lệnh HGET / GET cho Cơ sở dữ liệu Redis qua Node.js?

  2. Làm cách nào để xả redis db khỏi python redis?

  3. Redis Typed Client

  4. Có lệnh nào trong Redis cho cấu trúc dữ liệu HASH tương tự như MGET không?

  5. phpredis trên Windows 7 64bit xampp