You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.7 KiB

技术方面

gredis

配置

redis:
	default:
		address: 端口+地址
		db: 数据库编号
		pass: 密码

String : Set/Get

var,err:=g.Redis().Set(ctx,"key","value")//设置string类型数据
value,err:=g.Redis().Get(ctx,"key")//获取string类型数据,value为*gvar.Var格式
err:=g.Redis().SetEx(ctx,"key","value",ttl)//设置值并设定ttl

g.Redis().Do(ctx,"SET",key,value)//根据传入的参数顺序拼接redis语句,按每个关键词/值进行拆分

//获取redis长链接
conn,_:=g.Redis().conn(ctx)
defer conn.Close()

conn.Do()//执行命令

gdb钩子

//钩子类型:
Select Insert Update Delete
type HookHandler struct{
    Select HookFuncSelect
    Insert HookFuncInsert
    Update HookFuncUpdate
    Delete HookFuncDelete
}

//注册方法:
func (m *Model)Hook(hook HookHandler) *Model{}

//使用方法:
1.初始化钩子
hook:=gdb.HookHandler{
    Select:func (ctx context.Context,in *gdb.HookSelectInput)(result gdb.Result,err error){
        //这里写相应的处理逻辑
        result,err:=in.Next(ctx)//此处之前是Before钩子,此处之后是After钩子
    }
}
2.绑定钩子
g.Model("table").Hook(hook)//一次性使用
func init(){
    g.DB().Model("table").Hook(hook)//全局使用
}

在demo项目中添加了新的课程查询功能,在查询时加入了redis做缓存中间件,查询时先看redis内有没有数据,有则直接返回缓存数据,没有再请求数据库

添加了数据库钩子,在增删改操作中绑定了全局钩子,如果进行了增删改操作则删除redis中缓存的课程List,保证不会读到未修改的脏数据

现想添加课程-用户的多对多联合查询,但目前尝试了ScanList和With关联均失败