cuốn sách gpt4 ai đã làm

java - hibernate/Ehcache: xóa các bộ sưu tập khỏi bộ đệm cấp 2 không được đồng bộ hóa với các lần đọc DB khác

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 03:55:13 26 4
mua khóa gpt4 Nike

Tôi có một ứng dụng sử dụng JPA, Hibernate và ehcache cũng như các giao dịch khai báo của Spring. Tải trên cơ sở dữ liệu khá cao nên mọi thứ đều được lưu vào bộ nhớ đệm để tăng tốc mọi thứ, bao gồm cả các mục Bộ sưu tập. Giờ đây, việc các bộ sưu tập được lưu vào bộ nhớ đệm riêng biệt với thực thể sở hữu chúng không còn là bí mật nữa, vì vậy nếu tôi xóa một thực thể là một phần tử của lớp này khỏi bộ sưu tập được lưu trong bộ nhớ đệm, hãy duy trì một thực thể phải là một phần tử hoặc cập nhật một thực thể sao cho rằng nó chuyển từ một bộ sưu tập sang một bộ sưu tập khác, tôi phải thực hiện việc chế tạo trục xuất.

Vì vậy, tôi đã sử dụng trình xử lý sự kiện ngủ đông để theo dõi các thực thể được chèn, xóa hoặc cập nhật và lưu thông tin đó cho hành động của người quản lý giao dịch đồng bộ hóa giao dịch đã đăng ký trong Spring. Sau khi giao dịch đã được cam kết.

Vấn đề bây giờ làNhiều khi, một số giao dịch đồng thời khác tìm cách tìm thấy bộ sưu tập trong bộ đệm vừa bị xóa (các sự kiện này thường là một trong mười sự kiện theo nhật ký), tự nhiên khiến xảy ra EntityNotFoundException.

Làm cách nào để đồng bộ hóa chúng một cách chính xác?

Tôi đã thử loại bỏ từng phương thức trong số 4 phương thức Đồng bộ hóa giao dịch (được gọi tại các thời điểm khác nhau liên quan đến việc hoàn thành giao dịch) và điều đó không giúp ích gì.

câu trả lời hay nhất

Về cơ bản những gì bạn cần làm là buộc đọc từ cơ sở dữ liệu trong khi bộ sưu tập đang bị xóa hoặc vừa bị xóa. Một cách tiếp cận là đánh dấu bộ sưu tập là dirty ngay sau khi nhận được yêu cầu trục xuất nhưng trước khi thực hiện giao dịch để thay đổi nó. Bất kỳ giao dịch đồng thời nào xảy ra sẽ kiểm tra cờ bẩn và nếu nó được đặt thành đúng thì nó sẽ lấy dữ liệu từ cơ sở dữ liệu, nếu không nó có thể đọc từ bộ đệm. Bạn có thể cần thay đổi cài đặt giao dịch cơ sở dữ liệu để chặn các giao dịch đồng thời cho đến khi giao dịch cập nhật dữ liệu hoàn tất để dữ liệu chính xác được đọc từ cơ sở dữ liệu. Sau khi giao dịch hoàn tất, bạn có thể đặt lại cờ bẩn thành sai.

Bạn cũng có thể tạo khóa trên bộ sưu tập bộ nhớ đệm khi quá trình cập nhật, chèn hoặc xóa hết hạn miễn là quá trình trục xuất vẫn tiếp tục. Điều này sẽ đảm bảo rằng không có giao dịch nào khác có thể đọc/thay đổi bộ sưu tập được lưu trong bộ nhớ đệm cho đến khi quá trình loại bỏ hoàn tất.

Về java - hibernate/Ehcache : xóa các bộ sưu tập khỏi bộ đệm cấp 2 không được đồng bộ hóa với các lần đọc DB khác, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/1505940/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress