#node.js #postgresql #caching #sequelize.js
Вопрос:
Я разрабатываю простое приложение для блога, используя node, express и postgres через sequelize ORM.
Я следую инструкциям, предоставленным разработчиками, и инициирую кэш при определении своих моделей:
// --- models/index.js ---
const SequelizeSimpleCache = require(`sequelize-simple-cache`);
const defineCategory = require(`./category`);
const defineComment = require(`./comment`);
const defineArticle = require(`./article`);
const defineArticleCategory = require(`./article-category`);
const Aliase = require(`./aliase`);
const cache = new SequelizeSimpleCache({
Article: {ttl: false}, // cache forever
Category: {ttl: false},
Comment: {ttl: false}
}, {
debug: true,
ops: 10,
});
module.exports = (sequelize) => {
const Category = defineCategory(sequelize);
const Comment = defineComment(sequelize);
const Article = defineArticle(sequelize);
const ArticleCategory = defineArticleCategory(sequelize);
cache.init(Category);
cache.init(Comment);
cache.init(Article);
Article.hasMany(Comment, {as: Aliase.COMMENTS, foreignKey: `articleId`});
Comment.belongsTo(Article, {as: Aliase.ARTICLE, foreignKey: `articleId`});
Article.belongsToMany(Category, {through: ArticleCategory, as: Aliase.CATEGORIES});
Category.belongsToMany(Article, {through: ArticleCategory, as: Aliase.ARTICLES});
Category.hasMany(ArticleCategory, {as: Aliase.ARTICLE_CATEGORIES});
return {Category, Comment, Article, ArticleCategory};
};
Каждая модель расположена в отдельном модуле и определяется с помощью класса:
// --- models/category.js ---
const {DataTypes, Model} = require(`sequelize`);
class Category extends Model {}
module.exports = (sequelize) => Category.init({
name: {
type: DataTypes.STRING,
allowNull: false
}
}, {
sequelize,
modelName: `Category`,
tableName: `categories`
});
Когда я запускаю свой сервер, кэш, похоже, принимает мои модели:
CACHE INIT {
type: 'Category',
ttl: false,
methods: [
'findOne', 'findAndCountAll',
'findByPk', 'findAll',
'count', 'min',
'max', 'sum',
'find', 'findAndCount',
'findById', 'findByPrimary',
'all'
],
methodsUpdate: [
'create',
'bulkCreate',
'update',
'destroy',
'upsert',
'findOrBuild',
'insertOrUpdate',
'findOrInitialize',
'updateAttributes'
],
limit: 50,
clearOnUpdate: true,
hit: 0,
miss: 0,
load: 0,
purge: 0,
ratio: NaN,
size: { Category: 0 }
}
But while using app in dev mode the cache debug console remains the same:
CACHE OPS {
hit: 0,
miss: 0,
load: 0,
purge: 0,
ratio: NaN,
size: { Category: 0, Comment: 0, Article: 0 }
}
Я предполагаю, что ключ размера относится к кэшированным экземплярам, но он пуст, несмотря на любые запросы, сделанные в БД.
Я попытался запустить кэш сразу после определения моих моделей и до того, как они будут заполнены макетными данными, результат тот же.
Поскольку пакет sequelize-simple-cache довольно новый, мне не удалось найти ни одного рабочего примера его правильной настройки.