Как правильно использовать sequelize-simple-cache?

#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 довольно новый, мне не удалось найти ни одного рабочего примера его правильной настройки.