Triển khai bộ nhớ đệm LRU
Bạn đang phát triển một ứng dụng web thường xuyên truy xuất thông tin hồ sơ người dùng dưới dạng chuỗi. Để cải thiện hiệu năng, bạn muốn triển khai một bộ nhớ đệm đơn giản lưu các chuỗi hồ sơ này và có thể xác định mục nào ít được sử dụng gần đây nhất.
Lớp CacheEntry đã được nạp sẵn cho bạn.
Bài tập này là một phần của khóa học
Tối ưu hóa mã trong Java
Hướng dẫn bài tập
- Trong phương thức
get(), lấy mục trongcachetương ứng vớikeyđược chỉ định. - Sau khi lấy
key, cập nhật thời điểm truy cập của nó. - Sau khi đưa một mục vào cache, nếu đã vượt quá dung lượng, hãy xóa mục ít được sử dụng gần đây nhất.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
public class StringCache {
private final int capacity = 100;
private final Map cache = new HashMap<>();
public String get(String key) {
// Get the entry for the specified key
CacheEntry entry = ____.get(____);
if (entry == null) return null;
// Update its access time
entry.____();
return entry.value;
}
public void put(String key, String value) {
cache.put(key, new CacheEntry(value));
if (cache.size() > capacity) {
// If capacity exceeded, remove least recently used
____();
}
}
void removeLeastRecentlyUsed() {
String lruKey = null;
long oldest = Long.MAX_VALUE;
for (Map.Entry e : cache.entrySet()) {
if (e.getValue().lastAccessed < oldest) {
oldest = e.getValue().lastAccessed;
lruKey = e.getKey();
}
}
if (lruKey != null) { cache.remove(lruKey); }
}
public static void main(String[] args) {}
}