缓存
# 支持数据库全局查询
- 在每个数据应用logic中添加
Model(ctx context.Context)
方法,代码示例如下:
//见文件 modules\system\logic\system\setting_config.go
func (s *sSettingConfig) Model(ctx context.Context) *gdb.Model {
return dao.SettingConfig.Ctx(ctx).Hook(hook.Bind()).Cache(orm.SetCacheOption(ctx))
}
该方法返回一个gdb.Model对象,该对象添加cacheCache(orm.SetCacheOption(ctx))
支持全局查询缓存,且Hook绑定了modules/system/pkg/hook/cache_evict.go钩子,一但数据表有插入,更新,删除操作可以批量清除相关数据表缓存。
- 使用Model(ctx context.Context)方法的查询,默认都支持缓存,且缓存时间默认24小时,可以修改
orm.SetCacheOption(ctx context.Context, duration ...time.Duration)
的参数,自定义缓存时间;例子如下:
var settingConfigGroup *entity.SettingConfigGroup
err = service.SettingConfigGroup().Model(ctx).Where(dao.SettingConfigGroup.Columns().Code, gkey).Scan(&settingConfigGroup)
// 除了第一次,后续查询都支持缓存,且缓存时间默认24小时
如果不需要缓存,可以直接调用
dao.SettingConfig.Ctx(ctx)
方法,例如:var settingConfigGroup *entity.SettingConfigGroup err = service.SettingConfigGroup().Ctx(ctx).Where(dao.SettingConfigGroup.Columns().Code, gkey).Scan(&settingConfigGroup)
// 不支持缓存
- 改功能可以关闭,在config.yaml中配置设为false
settings:
enableGlobalDbCache: true # 是否开启全局数据库缓存,默认false
# 支持带tag的缓存
- 相关方法见
modules\system\pkg\cache\utils.go
上次更新: 2025/01/10, 11:26:33