Mengimplementasikan cache LRU
Anda sedang mengembangkan aplikasi web yang sering mengambil informasi profil pengguna sebagai string. Untuk meningkatkan kinerja, Anda ingin mengimplementasikan cache sederhana yang menyimpan string profil tersebut dan dapat mengidentifikasi entri mana yang paling jarang digunakan.
Kelas CacheEntry telah disiapkan untuk Anda.
Latihan ini adalah bagian dari kursus
Optimasi Kode di Java
Petunjuk latihan
- Dalam metode
get(), ambil entricacheuntukkeyyang ditentukan. - Setelah mengambil
key, perbarui waktu aksesnya. - Setelah menaruh entri ke dalam cache, jika kapasitas terlampaui, hapus entri yang paling jarang digunakan.
Latihan interaktif praktis
Cobalah latihan ini dengan menyelesaikan kode contoh berikut.
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) {}
}