WEB开发者-分享WEB开发知识,让开发变得更简单!

Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

download:Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

Nodejs逐渐成为前端同学进阶的必修技术之一,本课程将带大家从0到1开发一个前后端分离的精品项目《旧岛》,手把手教你用Node.js KOA2打造超好用的 Web框架,从而带前端同学彻底攻克服务端开发难点和头疼的Mysql数据库知识,本课程除了常规的业务开发更包含有大量的JS中高级 知识应用、异步编程与编程思维,对于同学们开发前端有极大的帮助,课程不仅是带前端同学深度学习Nodejs服务端开发,更是同学们就业升职的利器。
适合人群
想向大前端方向发展的前端工程师、 想深度学习Node.js的工程师
想创新性完成“毕业设计”的同学、符合技术储备要求即可学习

技术储备要求
有良好的JavaScript基础 及ES6基础
了解Node.js
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)
})

暂无相关信息

本文链接:https://www.webkfz.com/WEBkF/HTML/126928.html

版权声明:站内所有文章皆来自网络转载,只供分享作用,不代表本站的观点!

发表评论 共有 0 条评论)

联系客服
网站客服 业务合作 QQ
1244305267
公众号
公众号
公众号
返回顶部