Самое простое, что можно сделать, - это кэшировать на более высоком уровне, чем уровень подключения к базе данных. Если у вас есть слой доступа к данным, который изолирует вас от мелочей SQL, обычно это хорошее место. Если у вас есть место, где запрашиваются объекты данных, это было бы еще лучше; ваш ключ кэширования может быть идентификатором этих объектов.
В конечном итоге вам, вероятно, понадобится кеширующий прокси, который инкапсулирует вашу логику кеширования, запрещая чтение, но передавая записи через базовый сервис (уровень персистентности объекта или уровень доступа к данным). Вы можете использовать WeakReference
, чтобы неиспользуемые объекты истекли из вашей коллекции кэширования, и в этом случае вам нужно будет немного очистить. С другой стороны, вы можете написать свою собственную логику истечения срока действия, и в этом случае вам придется выполнять больше очистки, но при этом сохранится больший контроль.
Без более подробной информации сложно дать вам конкретный ответ.