登录
首页 >  Golang >  Go问答

连接golang和redis数据库

来源:stackoverflow

时间:2024-02-28 20:30:27 327浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《连接golang和redis数据库》,聊聊,我们一起来看看吧!

问题内容

我正在尝试使用 golang、redis 和 mognodb 创建一个 url 缩短器,但面临实际数据库连接的问题。

在我的应用程序中,我有几个包:

base62
|
|_base62.go
config
|
|__redis.go
models
|
|__url.go
request
|
|__shorten_request.go
response
|
|__shorten_response.go
routes
|
|__shorten.go
    main.go

在我的shorten.go 文件中:

func  Shorten(context *gin.Context){
    var request request.ShortenURLRequest
    if err := context.BindJSON(&request); err != nil {
        return
    }

    if !IsUrl(request.URL){
        context.IndentedJSON(http.StatusBadRequest, "Error")
        return 
    }
    // encode the long url
    short_url := base62.Encode(request.URL)

    // URL model
    var url models.URL
    url.ID = 1234567890
    url.LONG_URL = request.URL
    url.SHORT_URL = short_url

    // insert the data in redis db

    // create the response to send back to client
    var response response.ShortenURLResponse
    response.URL = request.URL
    response.SHORT_URL = short_url
    response.CREATED_AT = time.Now()

    context.IndentedJSON(http.StatusOK, response)
}

现在我想以缩短和解析文件访问数据库的方式创建数据库连接。

我获得的所有资源都有一个用于连接的文件,所有路由和控制器都在其中定义。

帮助将不胜感激

源代码可以在这里找到:github


正确答案


根据您的 main.go 文件,我认为您可以这样做:

func main() {
    rdb, err := redis.newclient()
    if err != nil {
        log.fatal(err)
    }

    router := gin.default()
    router.post("/api/v1/shorten", routes.shorten(rdb))
    router.get("/api/v1/:url", routes.resolve(rdb))
    router.run("localhost:9000")
}

func shorten(rdb *redis.client) gin.handlerfunc {
    return func(context *gin.context) {
        ctx := context.request.context()
        ...
        
        if err := rdb.set(ctx, key, value); err != nil {
            context.indentedjson(http.statusinternalservererror, "error")
            return 
        }
        ....
    }
}

或者更好的是,您可以创建一个包含 redis 客户端并充当请求路由器的结构,如下所示:

type Router struct {
    rdb *redis.Client
}

func NewRouter(rdb *redis.Client) *Router {
    return &Router{rdb: rdb}
}

func (r *Router) Shorten() gin.HandlerFunc {
    return func(context *gin.Context) {
        ...
        r.rdb.Set()
        ...
    }
}

func (r *Router) Resolve() gin.HandlerFunc {
    return func(context *gin.Context) {
        ...
        r.rdb.Get()
        ...
    }
}

func main() {
    rdb, err := redis.NewClient()
    if err != nil {
        log.Fatal(err)
    }

    r := NewRouter(rdb)

    router := gin.Default()
    router.POST("/api/v1/shorten", r.Shorten)
    router.GET("/api/v1/:url", r.Resolve)
    router.Run("localhost:9000")
}

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《连接golang和redis数据库》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>