Можно ли запросить кэшированную коллекцию записей в Rails?
Я кэширую результаты такой модели (с Memcached):
Rails.cache.fetch('Store.all') { Store.all }
Позже я хочу получить подмножество хранилища.все, например магазины в определенном городе. Есть ли простой способ запросить уже кэшированный набор хранилищ, или мне нужно снова обращаться к базе данных для каждого запроса?
Спасибо!
2 ответа:
Помните, что база данных оптимизирована для выполнения запросов, соответствующих произвольным условиям, а хранилище кэша-это просто быстрый поиск, если у вас есть известный ключ. Вы должны использовать кэш только для вещей, которые вы уже отфильтровали или подготовили.
Предполагая ключ кэша, подобный
cities/1/stores
для всех магазинов в городе 1, Вы можете кэшировать эту коллекцию и получить ее позже.Если у вас есть большое количество хранилищ, было бы анти-оптимизацией попытаться кэшировать
Store.all
как один ключ кэша и затем попробуйте отфильтровать его с помощью ruby для данного города или любого другого критерия. Ваша программа будет вынуждена перебирать все города, так как массивы не имеют индексов наcity_id
. Гораздо лучше позволить базе данных выполнять эту работу с предложением where и использовать возможности индексирования, предоставляемые базой данных.