Go读书社区web开发与高性能架构优化

qiusuo1024 · · 24 次点击 · · 开始浏览    
### Go读书社区web开发与高性能架构优化 课程以开发在线读书社区为背景,先使用Go语言及Beego框架进行项目开发,快速迭代上线,然后进行包括主从和分表分库、搜索优化、页面静态化、动态缓存、下载优化、服务负载均衡等一系列架构优化,最后实现Web应用的高可用&高并发,扛住千万PV。通过课程学习,不仅能帮你掌握快速开发web应用的技巧,同时也能获取架构设计的思想。授之以鱼,更能授之以渔。 适合人群 对Go语言有浓厚兴趣 不满足于CRUD开发,有兴趣开发大型的Web应用 技术储备要求 熟悉GO 语言基础,能自行完成基础环境搭建 熟悉Linux、MySQL常用操作命令 ``` func AsyncAdd(run func() error) { //TODO: 扔進異步協程池 go run() } func GetInstance(ctx context.Context,id uint64) (string, error) { data,err := GetFromRedis(ctx,id) if err != nil && err != redis.Nil{ return "", err } // 沒有找到數據 if err == redis.Nil { data,err = GetFromDB(ctx,id) if err != nil{ return "", err } AsyncAdd(func() error{ return UpdateCache(ctx,id,data) }) } return data,nil } func GetFromRedis(ctx context.Context,id uint64) (string,error) { // TODO: 從redis獲取信息 return "",nil } func GetFromDB(ctx context.Context,id uint64) (string,error) { // TODO: 從DB中獲取信息 return "",nil } func UpdateCache(ctx context.Context,id interface{},data string) error { // TODO:更新緩存信息 return nil } func main() { ctx,cancel := context.WithTimeout(context.Background(), 3 * time.Second) defer cancel() _,err := GetInstance(ctx,2021) if err != nil{ return } } ``` 剖析 我們先简單剖析一下,這一段代码要幹什麼?其實很简單,我們想要獲取一段信息,首先會從緩存中獲取,假如緩存中獲取不到,我們就從DB中獲取,從DB中獲取到信息後,在協程池中放入更新緩存的辦法,異步去更新緩存。整個設計是不是很圆滿,但是在實践工作中,異步更新緩存就沒有勝利過? 招致失敗的缘由就在這一段代码: ``` AsyncAdd(func() error{ return UpdateCache(ctx,id,data) }) ``` 錯誤的缘由只要一個,就是這個ctx,假如改成這樣,就啥事沒有了。 ``` AsyncAdd(func() error{ ctxAsync,cancel := context.WithTimeout(context.Background(),3 * time.Second) defer cancel() return UpdateCache(ctxAsync,id,data) }) ``` download: [Go读书社区web开发与高性能架构优化](http://www.51xuebc.com/thread-128-1-1.html)

关注本站微信公众号(和以上内容无关)Debiancn ,扫码关注:DebianCN

24 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2021-04-08 10:43:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传