Делаем простой TTL-кэш на Java!
Иногда значение нужно хранить не навсегда, а только короткое время: ответ API, результат вычисления или временную настройку.
Опишем запись кэша:
record Entry(T value, long expiresAt) {}
Создадим хранилище:
Map cache = new HashMap();
Добавим значение с временем жизни:
void put(String key, String value, long ttlMs) {
cache.put(key, new Entry(
value,
System.currentTimeMillis() + ttlMs
));
}
Теперь достанем значение:
String get(String key) {
var entry = cache.get(key);
if (entry == null) {
return null;
}
if (entry.expiresAt() < System.currentTimeMillis()) {
cache.remove(key);
return null;
}
return entry.value();
}
Проверка:
put("token", "abc", 1000);
System.out.println(get("token"));
Ожидаемый вывод:
abc
После истечения TTL метод вернёт null, а устаревшая запись удалится из Map.
👉 Java Ready | #практика
Иногда значение нужно хранить не навсегда, а только короткое время: ответ API, результат вычисления или временную настройку.
Опишем запись кэша:
record Entry(T value, long expiresAt) {}
Создадим хранилище:
Map cache = new HashMap();
Добавим значение с временем жизни:
void put(String key, String value, long ttlMs) {
cache.put(key, new Entry(
value,
System.currentTimeMillis() + ttlMs
));
}
Теперь достанем значение:
String get(String key) {
var entry = cache.get(key);
if (entry == null) {
return null;
}
if (entry.expiresAt() < System.currentTimeMillis()) {
cache.remove(key);
return null;
}
return entry.value();
}
Проверка:
put("token", "abc", 1000);
System.out.println(get("token"));
Ожидаемый вывод:
abc
После истечения TTL метод вернёт null, а устаревшая запись удалится из Map.
👉 Java Ready | #практика