Tôi đang sử dụng Jedis (máy khách java) để kết nối với máy chủ Redis. Tôi có 3 phiên bản Redis chạy trên ba nút khác nhau. Tôi muốn "có được" (đọc) một số hồ sơ từ 3 trường hợp Redis. Tôi muốn phát hành các "được" (đọc) song song, và sau đó làm một số xử lý trên các dữ liệu nhận được và tạo thành một đầu ra cuối cùng.Jedis có hỗ trợ hoạt động không đồng bộ
Cách tốt nhất để làm điều này trong java là gì?
Một trong những cách là tạo 3 chuỗi và phát hành "đọc" (đọc) trong mỗi thư mục (đồng bộ). Chờ cho tất cả 3 lệnh để hoàn thành và sau đó kết hợp kết quả.
Jedis có cơ chế phát hành 3 "được" (bất kỳ lệnh nào cho vấn đề đó) không đồng bộ, với tính năng gọi lại không?
Tôi có 3 phiên bản Redis khác nhau. Vì vậy, bạn có đề xuất sử dụng "ShardedJedisPipeline" (jedis/tests/ShardedJedisPipelineTest.java) để tương tác với các trường hợp Redis này song song không?
Đường ống Jedis bình thường (jedis/tests/PipeliningTest.java), chỉ gửi nhiều lệnh tới một phiên bản Redis duy nhất để chúng được thực thi sau khi trên máy chủ Redis (và tất cả các phản hồi có sẵn ở cuối).
Vì vậy, tôi giả sử tôi phải sử dụng "ShardedJedisPipeline". Nhưng có hai giới hạn cho điều này: 1. Tôi muốn thực thi kịch bản lệnh Lua tức là "eval" trên 3 phiên bản Redis song song. 2. Tôi không muốn sharding (một số thuật toán băm được sử dụng bởi Jedis) để phân phối dữ liệu hoặc ngày của riêng mình (sử dụng thuật toán của nó) đọc dữ liệu từ các cá thể. Chúng tôi có một chiến lược khác để phân phối dữ liệu. Vì vậy, tôi muốn để có thể xác định, một bản ghi nên được lưu trữ trong đó redis dụ và phù hợp từ nơi nó cần được đọc. keyTags dường như cung cấp cơ chế này nhưng không chắc chắn làm thế nào để sử dụng điều này với "eval".
redis.clients.jedis.Pipeline? –