Я хочу использовать mongo для хранения данных глобального канала, но я хочу кэшировать самые последние сообщения в памяти с помощью Redis. Есть ли способ настроить одну модель на использование двух адаптеров? Если нет, думаю, я попытаюсь использовать один контроллер для двух моделей.
Используйте два разных адаптера в одной модели
Ответы (1)
Это экспериментальная функция, но вы можете сделать так, чтобы одна модель использовала несколько соединений, а соединения могли использовать разные адаптеры:
В модели Sails v0.9.x с mongo
и redis
, определенными в /config/adapters.js
:
module.exports = {
adapter: ['mongo', 'redis']
attributes: {...}
}
В модели Sails v0.10.x с mongo
и redis
, определенными в /config/connections.js
:
module.exports = {
connections: ['mongo', 'redis']
attributes: {...}
}
Однако вы не можете указать, что некоторые атрибуты используют одно соединение, а другие атрибуты используют другое. Если задействовано более одного адаптера и адаптеры имеют одинаковые методы, то они будут объединены. Это будет иметь место при использовании sails-mongo
и sails-redis
в одной и той же модели; оба адаптера имеют find
, create
, update
и destroy
, поэтому в вашей модели будет использоваться только один из методов адаптера (sails-redis
в приведенном выше примере).
Какой тогда смысл в нескольких адаптерах? Это способ добавить в модель внешние методы API. Например, если у вас есть модель File
, представляющая файл, хранящийся на Amazon S3, вы можете использовать адаптер sails-s3
с методами upload
и download
вместе с sails-mongo
для хранения метаданных о файле.
Кэширование также является функцией, которая находится в активной разработке, но пока лучше всего использовать отдельный модель для кеша, как вы предложили.