Spring cung cấp một trừu tượng hóa cho tính năng bộ nhớ cache, cho phép bạn linh hoạt thay thế triển khai bộ nhớ cache ở mức độ thấp hơn và tiếp cận cùng một interface cache ở mức độ cao hơn.
Interface Cache
API cache của Spring được cung cấp dưới dạng các annotation.
Bật annotation
Spring cung cấp chức năng annotation cho tính năng bộ nhớ cache, nhưng bạn phải bật annotation.
Bạn có hai lựa chọn:
(1) Khai báo trong xml
Giống như trong ví dụ spring-ehcache.xml ở phần trước, sử dụng <cache:annotation-driven/>
(2) Sử dụng annotation đánh dấu
Bạn cũng có thể sử dụng annotation để đánh dấu một lớp và sử dụng annotation cache trong lớp đó.
Ví dụ:
Sử dụng annotation cache
Hỗ trợ cache của Spring tương tự như hỗ trợ giao dịch.
Đầu tiên, sử dụng annotation để đánh dấu phương thức, tương đương với việc xác định điểm chạm, sau đó sử dụng kỹ thuật Aop để truy cập vào tham số và giá trị trả về của phương thức trước và sau khi gọi phương thức, từ đó thực hiện logic cache.
Dưới đây là ba annotation phương thức cấp độ:
@Cacheable
Chỉ định phương thức được annotation có thể được lưu trữ trong bộ nhớ cache: Khi gọi phương thức lần đầu tiên, kết quả của nó sẽ được lưu trữ trong bộ nhớ cache, và trong khoảng thời gian hiệu lực của bộ nhớ cache, việc truy cập phương thức này sẽ trả về kết quả từ bộ nhớ cache mà không thực hiện lại đoạn mã trong phương thức.
annotation này có thể sử dụng thuộc tính condition để đặt điều kiện, nếu không đáp ứng điều kiện, không sử dụng khả năng cache, thực hiện trực tiếp phương thức.
Có thể sử dụng thuộc tính key để chỉ định quy tắc tạo khóa.
@CachePut
Khác với @Cacheable, @CachePut không chỉ lưu trữ kết quả của phương thức trong bộ nhớ cache, mà còn thực hiện đoạn mã trong phương thức.
Nó hỗ trợ các thuộc tính và cách sử dụng tương tự như @Cacheable.
@CacheEvict
Ngược lại với @Cacheable, @CacheEvict chỉ định rằng phương thức được annotation được sử dụng để xóa dữ liệu cache không hợp lệ hoặc không sử dụng.
Dưới đây là một ví dụ về cách sử dụng cơ bản của @Cacheable、@CacheEvict và @CachePut:
@Caching
Nếu bạn muốn sử dụng cùng một annotation cache (@Cacheable, @CacheEvict hoặc @CachePut) nhiều lần để annotation một phương thức, bạn cần sử dụng @Caching.
@CacheConfig
Khác với các annotation cache trước đó, đây là một annotation cấp lớp.
Nếu tất cả các hoạt động của lớp đều là hoạt động cache, bạn có thể sử dụng @CacheConfig để chỉ định lớp, giảm bớt một số cấu hình.
Lưu trữ bộ nhớ cache
Spring cho phép tích hợp nhiều loại bộ nhớ cache khác nhau thông qua cấu hình. Người dùng có thể chọn loại bộ nhớ cache phù hợp với nhu cầu cụ thể.
Các loại bộ nhớ cache khác nhau có hiệu năng và tính năng khác nhau. Nếu bạn muốn hiểu rõ hơn về cơ chế cụ thể, bạn có thể tham khảo: Hiểu rõ nguyên lý bộ nhớ cache. Ở đây, chúng tôi sẽ không đi vào chi tiết.
Sử dụng ConcurrentHashMap làm bộ nhớ cache
Cấu hình tham khảo:
Sử dụng Ehcache làm bộ nhớ cache
Cấu hình tham khảo:
Cấu hình trong tệp ehcache.xml hoàn toàn tuân thủ các tiêu chuẩn cấu hình chính thức của Ehcache.