У меня есть опыт работы с обоими.
Я бы сказал «да» на оба ваших вопроса.
Я использую ehcache вместе с Hibernate. Он кэширует данные, найденные в центральной базе данных, в памяти на нескольких узлах сервера в кластере. Причина, конечно, в том, чтобы иметь меньший доступ к базе данных. Если кэшированное значение записывается одним узлом, то это значение должно быть признано недействительным на других узлах, чтобы заставить их перечитать значение из базы данных и повторно кэшировать его.
Memcached Я использовал в качестве источника данных. Это простая база данных ключ = значение. На каждом сервисном узле вы определяете список узлов memcached, которые он может использовать. Затем он запишет в какой-то узел (по круговому циклу, я думаю). Ключ имеет информацию о том, на каком узле memcached хранится значение.
Итак, по моему опыту, memcached - это часто распространяемая база данных (не реляционная, но все же база данных), в то время как ehcache - более традиционный кеш.