Avatar
1
Hồng Quân Nguyễn Beginner
Làm sao để đồng bộ thông tin giữa 2 module Java trên cache
Hi anh Dũng, Em có 2 module Java cùng lấy thông tin dữ liệu trên cache, em đang sử dụng redis thì có cách nào đồng bộ giữa 2 module như kiểu:

khi có module A đọc hoặc ghi thì module B sẽ đợi module A xong r mới thực hiện và ngược lại

  • Answer
java synchronize
Remain: 5
1 Answer
Avatar
monkey Beginner
monkey Beginner
Đây là bài toán tương đối nan giải, anh thường sẽ không làm như vậy mà sẽ sử dụng 1 consumer duy nhất để thực hiện việc update thôi, tuy nhiên nếu em vẫn muốn làm kiểu này em có thể dùng cách sau, code này sẽ được triển khai ở mỗi server:

  1. Sử dụng 1 map để lưu trạng thái lock, ví dụ update_lock
  2. Sử dụng 1 channel để thông báo việc update đã xong

Code logic thế này:

while(true) {
  if (redis.increment('update_lock', key) == 1) {
    thực thi
    redis.decrement('update_lock', key);
    thông báo đã thực hiện xong qua channel
    break;
  } else {
    // chờ khi có thông báo đã thực hiện xong ở server khác gửi sang
  }
}

Em hiểu ý anh chứ?

  • 0
  • Reply
vâng, em hiểu cách trên r anh. Cách tốt nhất là nên dùng 1 consumer cho việc dùng chung dữ liệu với nhiều module à anh?  –  Hồng Quân Nguyễn 1670816488000
Ừ, theo cách đó thì việc xử lý concurrent cũng dễ hơn, xử lý transaction cũng dễ hơn. Cách kia thì cũng có rủi ro là phức tạp, với cả nhiều khi thông báo không đến được thì lại timeout (mặc dù trường hợp timeout cũng ít thôi)  –  tvd12 1670831420000