interface ExpiryPolicy
идея интерфейса - определять время через которое запись в кэше устареет, в зависимости от операций, производимых с объектом в кэше. Каждая операция может продлевать время жизни объекта в кэше - устанавливая новое время, до которого объект считается доступным.
В Reference Implementation устанавливается время жизни относительно текущего времени. При чем при использовании всех правил устаревания - не указано как время жизни должно перезаписываться, в каком порядке или меньшее/большее.
Each of the functions return a new Duration that specifies the amount of time that must pass before a cache entry is considered expired. Duration has constants defined for useful durations.
Каждая функция возвращает новый промежуток времени через который должен пройти перед тем как запись в кэше устареет.
Для всех методов справедливо, что
- если возвращен ZERO (т.е. нулевой отрезок времени) то запись сразу считается устаревшей
- если возвращен NULL - не нужно изменять время, когда запись устареет
Duration getExpiryForCreation()
This method is called by a caching implementation after a Cache.Entry is created, but before a Cache.Entry is added to a cache, to determine the Duration before an entry expires.
Этот метод должен быть вызван кодом реализаций после того, как запись будет сделана, но перед тем как запись будет добавлена в кэш, чтобы определить время когда запись устареет. Вероятна ситуация, что к этому моменту запись уже устарела.
Duration getExpiryForAccess()
This method is called by a caching implementation after a Cache.Entry is accessed to determine the Duration before an entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет получена из кэша, чтобы определить время, когда запись устареет.
Duration getExpiryForUpdate()
This method is called by the caching implementation after a Cache.Entry is updated to determine the Duration before the updated entry expires.
Этот метод должен быть вызван кодом реализации после того, как запись будет изменена, чтобы определить время, когда запись устареет.
пример реализации обработчика ExpiryPolicy
https://gist.github.com/kostapc/727489139e876b7ca391483e3a18a5f3
1. у всех производителей есть диски low-cost под десктопы и различные модели под серверные нужды — надо брать их. При чем они бывают заточены под разные виды данных — потоковая запись/чтение или рандомная запись/чтение.
2. есть материал пластин — стекло (специальное естественно) или алюминиевый сплав. Но это обычно для новых дисков не известно пока кто-то не разберет. Стеклянные обычно быстры и если их не трогать долго пашут, т.к. сама пластина более сбалансирована, но она более хрупкая — от падения 99% загнется.
3. количество пластин. Обычно технология у всех примерно одинаковая ± мелочи. Насколько мне известно сейчас 1tb — 1 пластина у новых дисков. Также играет роль плотность пластины — чем плотнее, тем больше шансов на ББ. 500gb-1tb — оптимальная на сегодняшний день. На вскидку нашел такую инфу: rml527.blogspot.ru/2010/09/hdd-platter-capacity-database.html