@zcong/db-cache
v0.7.2
Published
like go-zero cache, but for NodeJS
Downloads
11
Readme
db-cache
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