企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] ## 设置缓存 ``` //设置全局缓存,缓存方式是存放到内存中,缓存struct的记录数为1000条 cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000) //缓存针对的范围是所有具有主键的表,没有主键的表中的数据将不会被缓存 engine.SetDefaultCacher(cacher) //如果只想针对部分表 engine.MapCacher(&user, cacher) //针对指定表做缓存 engine.MapCacher(&user, nil) // 禁用指定表 ``` ## 注意 ### 不会进行缓存的表 1. 当使用了Distinct,Having,GroupBy方法将不会使用缓存 2. 在Get或者Find时使用了Cols,Omit方法,则在开启缓存后此方法无效,系统仍旧会取出这个表中的所有字段。 3. 在使用Exec方法执行了方法之后,可能会导致缓存与数据库不一致的地方。因此如果启用缓存,尽量避免使用Exec。如果必须使用,则需要在使用了Exec之后调用ClearCache手动做缓存清除的工作。比如: ``` engine.Exec("update user set name = ? where id = ?", "xlw", 1) engine.ClearCache(new(User)) ``` 4. 当条件语句有一点差异,都不会被当作缓存,如 ``` .Where("CFG_ID=? AND CFG_STATUS=0", "123") .Where("CFG_ID=? AND CFG_STATUS = 0", "123") ``` 5. 在 insert 时,会使整个表的缓存清空,最好在insert 前加入 nocache ``` GetSaas().NoCache().Insert(aa) ```