У меня есть кэш Guava, созданный с помощью expireAfterWrite(20, TimeUnit.MINUTES)
. Кэш также инициализируется десятками записей при создании. Когда значения истекают, клиент должен вызывать внешнюю службу и обновлять кеш.Вероятностное раннее истечение с помощью кэша Guava
Проблема: все инициализированные значения истекают одновременно и через 20 минут, и клиент будет обращаться к службе десятки раз почти в одном экземпляре.
Я не хочу, чтобы это произошло. Чтобы этого избежать - одна идея заключается в probabilistically expire the entries чуть раньше, чем TTL, так что услуга не будет сильно ударяться одновременно.
К сожалению, я не вижу возможности делать это с помощью кеша Guava - по крайней мере, ничего не вышло из Wiki или Javadoc. Есть ли другая библиотека? Я пытаюсь избежать написания собственной реализации кеша для этой цели.
Guava использует ордер O (1), поэтому это невозможно. Это несколько смягчается также с помощью 'refreshAfterWrite()', так что активно используемые записи перезагружаются без блокировки других читателей. В противном случае его слева на ваш собственный код, чтобы пакет, перегреться, использовать вторичный слой и т. Д., Чтобы создать более мощную политику. –