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

Làm thế nào để Redis đạt được thông lượng và hiệu suất cao?

Có rất nhiều thông tin trong tài liệu Redis để hiểu cách hoạt động của nó. Bây giờ, để trả lời cụ thể các câu hỏi của bạn:

1) Các kết nối được duy trì như thế nào?

Các kết nối được duy trì và quản lý bằng cách sử dụng vòng lặp sự kiện ae (do tác giả Redis thiết kế). Tất cả các hoạt động I / O của mạng đều không bị chặn. Bạn có thể xem ae như một cách triển khai tối giản bằng cách sử dụng cơ chế phân kênh I / O mạng tốt nhất của nền tảng (epoll cho Linux, kqueue cho BSD, v.v.) giống như libevent, libev, libuv, v.v.

2) Kết nối là TCP hay HTTP?

Các kết nối là TCP sử dụng giao thức Redis, là một giao thức hướng văn bản, tương thích với telnet đơn giản, hỗ trợ dữ liệu nhị phân. Giao thức này thường hiệu quả hơn HTTP.

3) Bộ nhớ được quản lý như thế nào?

Bộ nhớ được quản lý bằng cách dựa vào bộ cấp phát bộ nhớ có mục đích chung. Trên một số nền tảng, đây thực sự là công cụ cấp phát bộ nhớ hệ thống. Trên một số nền tảng khác (bao gồm cả Linux), jemalloc đã được chọn vì nó cung cấp sự cân bằng tốt giữa mức tiêu thụ CPU, hỗ trợ đồng thời, phân mảnh và dấu chân bộ nhớ. Mã nguồn jemalloc là một phần của bản phân phối Redis.

Trái ngược với các sản phẩm khác (chẳng hạn như memcached), không có triển khai trình phân bổ phiến trong Redis.

Một số cấu trúc dữ liệu được tối ưu hóa đã được triển khai trên bộ cấp phát mục đích chung để giảm dung lượng bộ nhớ.

4) Các kỹ thuật đồng bộ hóa được sử dụng để đạt được thông lượng cao bất chấp việc đọc / ghi cạnh tranh là gì?

Redis là một vòng lặp sự kiện đơn luồng, vì vậy không có đồng bộ hóa nào được thực hiện vì tất cả các lệnh đều được tuần tự hóa. Giờ đây, một số luồng cũng chạy trong nền cho các mục đích nội bộ. Trong một số trường hợp hiếm hoi, họ truy cập vào dữ liệu được quản lý bởi luồng chính, các nguyên thủy đồng bộ hóa pthread cổ điển được sử dụng (ví dụ:mutexes). Nhưng 100% truy cập dữ liệu được thực hiện thay mặt cho nhiều kết nối máy khách không yêu cầu bất kỳ đồng bộ hóa nào.

Bạn có thể tìm thêm thông tin ở đó:Redis là một luồng, vậy nó thực hiện I / O đồng thời như thế nào?

Sự khác biệt giữa triển khai đơn giản của máy có trong bộ nhớ đệm và máy chủ có thể phản hồi lệnh và hộp Redis là gì?

Không có sự khác biệt. Redis là một triển khai đơn giản của một máy có bộ nhớ đệm trong bộ nhớ và máy chủ có thể phản hồi các lệnh. Nhưng đó là một triển khai được thực hiện đúng:

  • sử dụng mô hình vòng lặp sự kiện theo luồng đơn
  • sử dụng cấu trúc dữ liệu đơn giản và tối giản được tối ưu hóa cho các trường hợp sử dụng tương ứng của chúng
  • đưa ra một tập hợp các lệnh được lựa chọn cẩn thận để cân bằng giữa tính tối giản và tính hữu dụng
  • liên tục nhắm mục tiêu đến hiệu suất thô tốt nhất
  • thích ứng tốt với các cơ chế hệ điều hành hiện đại
  • cung cấp nhiều cơ chế bền bỉ vì cách tiếp cận "một kích thước phù hợp với tất cả" chỉ là một giấc mơ.
  • cung cấp các khối xây dựng cho các cơ chế HA (ví dụ:hệ thống sao chép)
  • tránh xếp chồng các lớp trừu tượng vô ích như bánh kếp
  • dẫn đến một cơ sở mã rõ ràng và dễ hiểu mà bất kỳ nhà phát triển C giỏi nào cũng có thể hài lòng với



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để tạm dừng hoặc tiếp tục công việc cần tây?

  2. Spring session redis 'Không có bean nào có tên' springSessionRepositoryFilter 'được xác định'

  3. Tập lệnh Lua cho Redis tính tổng các giá trị của các khóa

  4. làm thế nào để luôn cập nhật bộ nhớ đệm

  5. Làm thế nào để hủy bỏ các công việc được xếp hạng bởi các công nhân sắp xếp lại?