Я реализую клиент Redis с поддержкой кэширования недавно прочитанных значений. В качестве кеша я использую Guava LoadingCache , поскольку он очень хорошо подходит для моего варианта использования.
Одна из функций LoadingCache , которую я действительно хотел бы использовать, - это 'refreshAfterWrite '. По умолчанию refre sh выполняется синхронно; однако я могу переопределить CacheLoader.reload()
, чтобы реализовать его асинхронно.
Мой клиент может создать ExecutorService и отправлять ему задачи. Я подумываю использовать ThreadPoolExecutor с минимальным и максимальным количеством потоков.
Мой вопрос - как мне выбрать минимальный и максимальный размер? Если размер слишком консервативный, задачи могут дольше оставаться в очереди. С другой стороны, слишком много потоков может вызвать перегрузку памяти и другие проблемы.
Дополнительные сведения: в приложении может быть несколько экземпляров клиента Redis.