Có cách nào khác để chuyển dữ liệu lớn từ Redis sang MySQL không?
Redis có khả năng (sử dụng bgsave) để tạo kết xuất dữ liệu theo cách không bị chặn và nhất quán.
https://github.com/sripathikrishnan/redis-rdb-tools
Bạn có thể sử dụng gói nổi tiếng của Sripathi Krishnan để phân tích cú pháp tệp kết xuất redis (RDB) bằng Python và điền phiên bản MySQL ngoại tuyến. Hoặc bạn có thể chuyển đổi kết xuất Redis sang định dạng JSON và viết tập lệnh bằng bất kỳ ngôn ngữ nào bạn muốn đưa vào MySQL.
Giải pháp này chỉ thú vị nếu bạn muốn sao chép toàn bộ dữ liệu của phiên bản Redis vào MySQL.
Redis có bất kỳ hệ thống kích hoạt nào mà tôi có thể sử dụng để tránh các lỗi như hệ thống xếp hàng không?
Redis không có khái niệm kích hoạt, nhưng không có gì ngăn cản bạn đăng các sự kiện trong hàng đợi Redis mỗi khi một thứ gì đó phải được sao chép sang MySQL. Ví dụ:thay vì:
# Add an item to a user shopping cart
RPUSH user:<id>:cart <item>
bạn có thể thực thi:
# Add an item to a user shopping cart
MULTI
RPUSH user:<id>:cart <item>
RPUSH cart_to_mysql <id>:<item>
EXEC
Khối MULTI / EXEC làm cho nó nguyên tử và nhất quán. Sau đó, bạn chỉ cần viết một daemon nhỏ đang đợi trên các mục của hàng đợi cart_to_mysql (sử dụng các lệnh BLPOP). Đối với mỗi mục được định giá lại, daemon phải tìm nạp dữ liệu có liên quan từ Redis và điền phiên bản MySQL.
Redis không lưu trữ được dữ liệu trong tệp của chúng tôi, vì vậy liệu có thể lưu trữ dữ liệu đó trực tiếp vào cơ sở dữ liệu MySQL không?
Tôi không chắc mình hiểu câu hỏi ở đây. Nhưng nếu bạn sử dụng giải pháp trên, độ trễ giữa các bản cập nhật Redis và các bản cập nhật MySQL sẽ khá hạn chế. Vì vậy, nếu Redis không thành công, bạn sẽ chỉ mất các thao tác cuối cùng (trái với giải pháp dựa trên công việc cron). Tất nhiên, không thể có sự nhất quán 100% trong việc truyền tải dữ liệu.