| 0.如何确定key是否存在? 如果访问了不存在的key会如何? |
GORM中使用事务
公司用的还是 v1.x版本,业务场景是先根据条件删除一条记录,同时写入一条新的。 要保证两者要么同时执行成功,要么都不执行。本地demo记录一下:
1 | create table shuang.student |
MySQL根据某张表复制新表
在InnoDB一棵B+树,可以存放多少行数据中,探讨了在B+数深度为3的前提下, mysql单表的数据上限:
如果单条记录大小为1k,能存1170*1170*16=21902400行数据. 实践中,可能单条记录会小于1k,从而单表上限可以稍稍增大,但一般也不超过5000万.
Loop Invariant Code Motion
https://go-review.googlesource.com/c/go/+/694016
循环不变代码外提 (Loop-invariant code motion)
WebHook及其在github中的使用
钩子Hooks和回调Callback,是指在执行一系列操作过程中,触发了某个条件,会去执行某项操作。
如在GORM中,想要在执行查询后,上报一下执行的时间,则可以
1 | db.Callback().Query().After("gorm:query").Register("endRead", completeRead) |
其中endRead为自定义的事件名称,completeRead为自定义的触发时要执行的方法
(在GROM中,Hooks仅针对当前场景有效,Callback则针对全局有效)
在日志库 github.com/sirupsen/logrus,redis go客户端[github.com/go-redis/redis/v8]等库中,也都支持钩子/回调