目前es6出了两种新类型,分别是map与set:https://www.runoob.com/w3cnote/es6-map-set.html
今天在写一个项目时,就用到map类
@Injectable()
export class InterfaceService { constructor(@InjectRepository(InterfaceEntity) public readonly interfaceRepository : Repository<InterfaceEntity>){ } // 加一级缓存 interfaceMap = new Map() async get_interface(interfaceName){ //判断请求是否有根据名字查询 if(!interfaceName){ let data = this.interfaceMap.has("all")?this.interfaceMap.get("all"):this.interfaceRepository.query("select * from interface")
//刷新缓存 if(!this.interfaceMap.has("all")){
this.interfaceMap.set("all",this.interfaceRepository.query("select * from interface")) } return data }else{ if(this.interfaceMap.has(interfaceName)){ return this.interfaceMap.get(interfaceName) }else{ let res = await this.interfaceRepository.find({"interface_name":interfaceName}).then(result=>{ return result }) this.interfaceMap.set(interfaceName,res) console.log(res,"service") return res } } }
用了缓存之后,响应时间迅速减小,减少了对数据库的访问
但是有个问题,缓存什么时候更新呢?百度了一下:
1.利用定时器定时刷新
2.利用lru-cache(PS:要好好学习一下)
鉴于我的项目这几个接口并不需要很多的增删改,所以我决定在增删改的时候清空
cache就好
this.interfaceMap.clear()