Tôi đang sử dụng Spring caching (với EHCache) ở phía máy chủ xác định (các) khóa bộ nhớ cache trong @Cacheable. Vấn đề là các khách hàng khác nhau gửi cùng một chuỗi được sử dụng như các phím với cách viết khác nhau khi họ gửi trường hợp nhạy cảm. Kết quả là bộ đệm của tôi chứa nhiều đối tượng hơn là chúng phải có.Làm cách nào để tránh các phím nhạy cảm trong bộ nhớ đệm của Spring?
Ví dụ: Hãy nói rằng tôi có các bộ nhớ đệm sau định nghĩa cho một phương pháp nhất định:
@Cacheable(value = "myCache", key="{#myString}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
Bây giờ khách hàng A gửi "abc" (tất cả chữ thường) để điều khiển. Bộ điều khiển gọi getFoo và "abc" được sử dụng làm chìa khóa để đặt một đối tượng vào bộ nhớ cache. Máy khách B gửi "abC" (chữ hoa C) và thay vì trả về đối tượng được lưu trong bộ đệm cho khóa "abc", đối tượng bộ nhớ cache mới cho khóa "abC" được tạo.
Làm cách nào để tránh các khóa có phân biệt chữ hoa chữ thường?
Tôi biết tôi có thể định nghĩa phím bộ nhớ cache để được chữ thường như thế này:
@Cacheable(value = "myCache", key="{#myString.toLowerCase()}")
public SomeBusinessObject getFoo(String myString, int foo){
...
}
Đây là khóa học làm việc. Nhưng tôi đang tìm một giải pháp tổng quát hơn. Tôi có nhiều cache và nhiều khóa cache và làm một số @CacheEvict (s) và @CachePut (s) và nếu tôi sử dụng phương pháp "toLowerCase", tôi luôn phải đảm bảo không quên nó ở bất cứ đâu.
Có lẽ đây là hữu ích, có của riêng KeyGenerator http://stackoverflow.com/questions/27574786/generating-unique-cache-key-with-spring-keygenerator-not-working – gaston
Tôi nghĩ rằng bạn có thể ủy sang phương pháp khác thực hiện bộ nhớ đệm thực tế * sau * bạn thực hiện các sửa đổi mong muốn cho các phím –