运维开发网
广告位招商联系QQ:123077622
 
广告位招商联系QQ:123077622

应用Dubbo框架打造仿猫眼项目 理解微服务核心思想

运维开发网 https://www.qedev.com 2021-04-09 15:47 出处:51CTO 作者:mb606da88bb682a
download:应用Dubbo框架打造仿猫眼项目理解微服务核心思想Dubbo作为主流的微服务框架之一,为开发人员带来非常多的便利。本门课程结合“仿猫眼”项目,分别针对Dubbo中的重要特性、微服务中核心内容以及面试中的常见问题,进行归纳整理,强化讲解,为你提供从零到面试的一条龙服务。适合人群有Java面向对象编程开发经验,对架构设计提升有渴望的同学技术储备要求熟悉Java面向对象编程思想、熟悉S

download:应用Dubbo框架打造仿猫眼项目 理解微服务核心思想

Dubbo作为主流的微服务框架之一,为开发人员带来非常多的便利。本门课程结合“仿猫眼”项目,分别针对Dubbo中的重要特性、微服务中核心内容以及面试中的常见问题,进行归纳整理,强化讲解,为你提供从零到面试的一条龙服务。

适合人群

有Java面向对象编程开发经验,对架构设计提升有渴望的同学

技术储备要求

熟悉Java面向对象编程思想、

熟悉SpringMVC、Spring、Mybatis等框架基本应用,

了解Guns和Springboot框架

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)

})

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号