Skip to content
The secondary life cycle cache of the database.
JavaScript
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.eslintignore
.eslintrc
.gitignore
LICENSE
README.md
index.js
package.json

README.md

ficache

数据库二级缓存.

  • 模型查询设置缓存
  • 自动过期
  • 数据更新及时删除缓存
  • 多表查询设置缓存
  • 执行日志

支持查询方法

  • findOne
  • findAll
  • count
  • find
  • findAndCountAll

支持更新方法

  • create
  • update
  • destroy

快速使用

建议搭配 sequelize-base 使用

创建 model

const Cacher = require('ficache');
const Base = require('sequelize-base');
const Sequelize = require('sequelize');
const {INTEGER, STRING, CHAR} = DataTypes;
 
const pool = new Sequelize(Object.assign(config, {
  logging: (msg) => log.info(msg),
}));
 
const attributes = {
  userId: {type: INTEGER(11), primaryKey: true, autoIncrement: true, field: 'user_id'},
  account: {type: STRING(30), comment: 'accout', allowNull: false, unique: true, field: 'accout'},
  nickName: {type: STRING(30), comment: 'nickName', allowNull: false, field: 'nickname'},
  password: {type: STRING(32), comment: '密码', allowNull: false, field: 'password'},
  invalid: {type: CHAR(1), defaultValve: 'N', comment: '是否有效', field: 'invalid'},
};
 
const UserEntity = pool.define('User', attributes, {
  timestamps: true,
  freezeTableName: true,
  updatedAt: 'mtime',
  createdAt: 'ctime',
  tableName: 'bas_user',
  charset: 'utf8mb4',
  comment: '用户表',
});
 
class UserModel extends Base {
 
  constructor(opts) {
    super(opts);
  }
 
  static getInstance(opts = {
      entity: UserEntity,
      cacher: new Cacher({
        dbClient: pool,
        cacheClient: redis.client,
        model: UserEntity,
        logger: log,
      }),
    }) {
    if (!this.instance) {
      this.instance = new UserModel(opts);
    }
    return this.instance;
  }
 
}
 
module.exports = UserModel;

查询缓存

'use strict';

const userModel = require('../model/userModel');

exports.getUsers = async () => {
  return userModel.findAll();
};

第一次查询会从数据库中获取数据,并设置缓存,之后查询从缓存中获取

Executed (cache): key/sequelize_base_cache:cache:base_user:7afe7351e3372bfa3dbdbd63d4adeb2059ef2c88 {"method":"findAll","params":[{"where":{"invalid":"N"},"attributes":[]}]}

删除缓存

'use strict';

const userModel = require('../model/userModel');

exports.addUser = async (body) => {
  return userModel.create(body);
};

执行此操作会触发bas_user相关的key删除

Executed (delCache): mapKey/sequelize_base_cache:cache_keymap:bas_user

Author

Polix © Ricky 泽阳, Released under the MIT License.

You can’t perform that action at this time.