一文讲清:Go 语言如何微服务框架 Kratos 操作 MySQL 和 Redis。

文摘   2025-01-24 22:41   四川  

用 Kratos 框架做 Go 语言的微服务开发,常常涉及与数据库的交互,MySQL 和 Redis 算是最常见的两个存储系统。今天就从操作这两个存储系统入手,讲讲实际项目中怎么把它们跑起来。

一、连接 MySQL

MySQL 肯定是绕不开的。假设你已经有了数据库和相关表,接下来要做的是怎么把这个数据库接到 Kratos 微服务里。首先需要配置好数据库的基本信息——IP 地址、端口号、用户名、密码等等。这一步通常我们放在配置文件config.yaml里,看起来大概是这样:

yaml


database:
  mysql:
    addr: "127.0.0.1:3306"
    username: "user"
    password: "pass"
    dbname: "testdb"

配置清晰了,之后的任务是把这些东西搬到代码里使用。在 Kratos 中使用gorm作为 ORM 是个常见的做法,能让我们省不少事。让我们建一个Database的结构体来存这些配置,这点和平时写 Go 代码没太大区别:

go


type Database struct {
    Addr string
    Username string
    Password string
    DbName string
}

拿到配置以后,下一步就是要写数据库连接的具体代码了。还是在 main 函数里,依据刚刚拿到的配置构建 DSN,也就是数据源名。DSN 像是数据库的「门牌号」,获取*gorm.DB对象的关键就在这里:

go


func NewDatabase(*conf.Data) *Database {
    return &Database{
        Addr: c.Database.Mysql.Addr,
        Username: c.Database.Mysql.Username,
        Password: c.Database.Mysql.Password,
        DbName: c.Database.Mysql.Dbname,
    }
}

在这之后通过gorm.Open函数接上数据库,简单一招就完成了。写好这段代码以后,数据库操作就引入成功了,是不是感觉有点头绪了?

但这不够。我们要再进一步,做个 DAO 层。这种做法让我们不必每次调用数据库时都手写 SQL。给业务层提供相应的 CRUD 接口,调用数据库更加自如。往后需要换数据库?也只需要在底层调整代码,无需惊动上层的业务逻辑。这样整体的结构很干净。

二、使用 Redis

再聊聊 Redis。它可是提高性能的好手,快、轻、支持丰富数据结构,是做缓存的首选。照例还是在配置文件里先把 Redis 信息写好,端口、密码之类的都预先设定:

yaml


redis:
  addr: "127.0.0.1:6379"
  password: ""
  db: 0

接下来是最基础的连接操作。对 Redis 来说,一般项目中大家爱用go-redis/redis/v8库,结合 Kratos 的配置使用非常便捷。这里我们也这样处理:

go


func NewRedis(*conf.Data) *redis.Client {
    rdb := redis.NewClient(&redis.Options{
        Addr: c.Redis.Addr,
        Password: c.Redis.Password,
        DB: c.Redis.Db,
    })
    return rdb
}

照这样,rdb就是跟 Redis 进行通信的核心。有了它以后,设缓存,查数据,都在手指间跑起来了。一些操作频繁的数据,例如用户 Session 或热帖子内容,扔到 Redis 里缓存最好不过。你在代码里头rdb.Set()rdb.Get()也就没什么障碍了。

可能你在用 Redis 时还要加上些过期时间控制,这事也是一两句代码搞定,想设多久的过期时间都行。包括你想清除某些数据,都能用这个客户端做得明明白白。

整体来讲,整个流程毫无弯路,流畅又容易维护。


粒粒快点跑
我是粒姐,11年老猎头,职业咨询顾问,曾创立两家猎头公司。 分享求职技巧和职场经验,职业愿景是帮助1000人找到心仪工作。 猎聘签约求职教练,1V1咨询,求职辅导,职业规划咨询,职场辅导。视频号:#粒粒快点跑
 最新文章