Đây là sự so sánh giữa táo và cam. Xem http://redis.io/topics/benchmarks
Redis là một điều khiển từ xa hiệu quả kho dữ liệu. Mỗi khi một lệnh được thực thi trên Redis, một thông báo sẽ được gửi đến máy chủ Redis và nếu máy khách đồng bộ, nó sẽ chặn việc chờ trả lời. Vì vậy, ngoài chi phí của chính lệnh, bạn sẽ phải trả cho một vòng mạng hoặc một IPC.
Trên phần cứng hiện đại, các vòng quay mạng hoặc IPC đắt tiền một cách đáng ngạc nhiên so với các hoạt động khác. Điều này là do một số yếu tố:
- độ trễ thô của phương tiện (chủ yếu dành cho mạng)
- độ trễ của bộ lập lịch hệ điều hành (không được đảm bảo trên Linux / Unix)
- việc bỏ sót bộ nhớ cache rất tốn kém và xác suất bộ nhớ cache bị bỏ sót tăng lên trong khi các quy trình máy khách và máy chủ được lập lịch vào / ra.
- trên các hộp cao cấp, NUMA tác dụng phụ
Bây giờ, hãy xem lại kết quả.
So sánh việc triển khai bằng cách sử dụng trình tạo và cài đặt sử dụng lệnh gọi hàm, chúng không tạo ra cùng một số vòng lặp cho Redis. Với trình tạo, bạn chỉ cần có:
while time.time() - t - expiry < 0:
yield r.get(fpKey)
Vì vậy, 1 vòng mỗi lần lặp. Với chức năng này, bạn có:
if r.exists(fpKey):
return r.get(fpKey)
Vì vậy, 2 roundtrips mỗi lần lặp. Không có gì ngạc nhiên khi máy phát điện nhanh hơn.
Tất nhiên, bạn phải sử dụng lại cùng một kết nối Redis để có hiệu suất tối ưu. Không có điểm nào để chạy một điểm chuẩn kết nối / ngắt kết nối một cách có hệ thống.
Cuối cùng, về sự khác biệt hiệu suất giữa các cuộc gọi Redis và các lần đọc tệp, bạn chỉ đơn giản là so sánh một cuộc gọi cục bộ với một cuộc gọi từ xa. Các lần đọc tệp được hệ thống tệp OS lưu vào bộ nhớ đệm, vì vậy chúng là các hoạt động truyền bộ nhớ nhanh giữa hạt nhân và Python. Không có I / O đĩa nào liên quan ở đây. Với Redis, bạn phải trả chi phí cho các chuyến khứ hồi, vì vậy nó sẽ chậm hơn nhiều.