0.7.2 • Published 2 years ago

@zcong/db-cache v0.7.2

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

db-cache

NPM version NPM downloads JS Test codecov

like go-zero cache, but for NodeJS

Features

  • universal Support typeorm and sequelize-typescript by default, alsoe support extensions
  • singleflight Concurrent requests for the same instance will only call the database once
  • cache nonexist Records that do not exist in the database will also be cached for a period of time
  • memory efficient A record will only cache one complete data, and a unique key will cache one primary key reference
  • sharding Out-of-the-box support for Redis cluster sharding by @zcong/node-redis-cache
  • metrics Out-of-the-box support prometheus metrics by @zcong/node-redis-cache

Install

$ yarn add @zcong/db-cache
# or npm
$ npm i @zcong/db-cache --save

Usage

Typeorm

@Entity()
export class Student {
  @PrimaryGeneratedColumn()
  studentId: number

  @Column({
    unique: true,
  })
  cardId: string

  @Column()
  age: number
}

const redis = new Redis()
const cache = new RedisCache({ redis, prefix: 'typeorm' })

const student = new TypeormCache(new TypeormAdaptor(StudentRepository), cache, {
  disable: false,
  expire: 60, // cache expire seconds
  uniqueFields: ['cardId'], // cacheFindByUniqueKey method fields allowlist, filed must be unique
})

// findone with cache
console.log(await student.cacheFindByPk(1))
console.log(await student.cacheFindByUniqueKey('cardId', 'card-01'))
// updateone, will clear record cache
console.log(await student.cacheUpdateByPk(record))
// deleteone, will clear record cache
console.log(await student.deleteByPk(1))
// only clear record cache
console.log(await student.deleteCache(real))

Sequelize-Typescript

@Table
export class Student extends Model<Student, Partial<Student>> {
  @Column({
    primaryKey: true,
    autoIncrement: true,
  })
  studentId: number

  @Column({
    unique: true,
  })
  cardId: string

  @Column
  age: number
}

const redis = new Redis()
const cache = new RedisCache({ redis, prefix: 'sequelize' })

const student = new TypeormCache(
  new SequelizeTypescriptAdaptor(StudentRepository),
  cache,
  {
    disable: false,
    expire: 60, // cache expire seconds
    uniqueFields: ['cardId'], // cacheFindByUniqueKey method fields allowlist, filed must be unique
  }
)

// findone with cache
console.log(await student.cacheFindByPk(1))
console.log(await student.cacheFindByUniqueKey('cardId', 'card-01'))
// updateone, will clear record cache
console.log(await student.cacheUpdateByPk(record))
// deleteone, will clear record cache
console.log(await student.deleteByPk(1))
// only clear record cache
console.log(await student.deleteCache(real))

License

MIT © zcong1993