diff --git a/周新忠学习笔记/4.2/1.jpg b/周新忠学习笔记/4.2/1.jpg new file mode 100644 index 0000000..8894276 Binary files /dev/null and b/周新忠学习笔记/4.2/1.jpg differ diff --git a/周新忠学习笔记/4.2/2.jpg b/周新忠学习笔记/4.2/2.jpg new file mode 100644 index 0000000..ca4c61c Binary files /dev/null and b/周新忠学习笔记/4.2/2.jpg differ diff --git a/周新忠学习笔记/4.2/3.jpg b/周新忠学习笔记/4.2/3.jpg new file mode 100644 index 0000000..e529c34 Binary files /dev/null and b/周新忠学习笔记/4.2/3.jpg differ diff --git a/周新忠学习笔记/4.2/4.jpg b/周新忠学习笔记/4.2/4.jpg new file mode 100644 index 0000000..ae854b9 Binary files /dev/null and b/周新忠学习笔记/4.2/4.jpg differ diff --git a/周新忠学习笔记/4.2/周新忠4月2日学习笔记.md b/周新忠学习笔记/4.2/周新忠4月2日学习笔记.md new file mode 100644 index 0000000..c631342 --- /dev/null +++ b/周新忠学习笔记/4.2/周新忠4月2日学习笔记.md @@ -0,0 +1,72 @@ +## 技术方面 + +### gredis + +配置 + +```yaml +redis: + default: + address: 端口+地址 + db: 数据库编号 + pass: 密码 +``` + + + +String : Set/Get + +```go +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钩子 + +```go +//钩子类型: +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关联均失败 +