当前位置: 首页 > news >正文

国内知名网站链接交换公司

国内知名网站,链接交换公司,建筑工程网络教育,河北邯郸有几个区县构建云原生项目的dao层 配置读写分离的mysql集群 1. 编写yml配置文件 搭建一主二从的mysql集群、单机redis db.yml mysql:source: # 主数据库driverName: mysqlhost: 127.0.0.1port: 3309database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4replica1…

构建云原生项目的dao层
配置读写分离的mysql集群

1. 编写yml配置文件

搭建一主二从的mysql集群、单机redis

db.yml

mysql:source: # 主数据库driverName: mysqlhost: 127.0.0.1port: 3309database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4replica1: # 从数据库driverName: mysqlhost: 127.0.0.1port: 3310database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4replica2: # 从数据库driverName: mysqlhost: 127.0.0.1port: 3311database: db_tiktokusername: tiktokDBpassword: tiktokDBcharset: utf8mb4redis:addr: 127.0.0.1port: 6379password: 123456db: 0 # 数据库编号

2. 使用viper,读对应yml文件,保存到生成的对象中

var (_db       *gorm.DBconfig    = viper.Init("db")zapLogger = zap.InitLogger()
)

其中viper init方法的逻辑如下:

// Init 初始化Viper配置
func Init(configName string) Config {config := Config{Viper: V.New()}v := config.Viperv.SetConfigType("yml")      //设置配置文件类型v.SetConfigName(configName)//设置配置文件搜索路径v.AddConfigPath("./config") //设置配置文件路径 !!!注意路径问题v.AddConfigPath("../config")v.AddConfigPath("../../config")//读取配置文件的内容if err := v.ReadInConfig(); err != nil {//global.SugarLogger.Fatalf("read config files failed,errors is %+v", err)log.Fatalf("errno is %+v", err)}return config
}

3. 从viper的config中,构建目标数据库的dsn

func getDsn(driverWithRole string) string {username := config.Viper.GetString(fmt.Sprintf("%s.username", driverWithRole))password := config.Viper.GetString(fmt.Sprintf("%s.password", driverWithRole))host := config.Viper.GetString(fmt.Sprintf("%s.host", driverWithRole))port := config.Viper.GetInt(fmt.Sprintf("%s.port", driverWithRole))Dbname := config.Viper.GetString(fmt.Sprintf("%s.database", driverWithRole))// data source namedsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, port, Dbname)return dsn
}

例如现在要获取mysql “一主二从” 的主机dsn:

dsn1 := getDsn("mysql.source")

4. 拿到dsn之后,可以使用gorm连接数据库

将一主二从都连接上

	var err error_db, err = gorm.Open(mysql.Open(dsn1), &gorm.Config{Logger:                 logger.Default.LogMode(logger.Info),PrepareStmt:            true,SkipDefaultTransaction: true,})if err != nil {panic(err.Error())}dsn2 := getDsn("mysql.replica1")dsn3 := getDsn("mysql.replica2")

5. 配置mysql数据库读写分离

  • dbresolver 的作用是将数据库的读写操作分发到不同的数据库实例上。在配置中,Sources 字段表示主数据库(写操作)的连接信息,Replicas 字段表示从数据库(读操作)的连接信息。通过配置这些连接信息,dbresolver 可以根据一定的策略将读操作分发到从数据库实例上,以减轻主数据库的读压力,提高系统的并发性能。
  • 代码中,Sources 设置了一个主数据库连接,Replicas 则设置了两个从数据库连接。这样 dbresolver 就知道在进行数据库操作时应该选择主数据库还是从数据库。同时,Policy 字段指定了负载均衡策略,这里采用的是随机策略即 RandomPolicy。最后,TraceResolverMode 字段表示是否在日志中打印数据库的主从模式,对于调试和跟踪非常有用。
	// 配置dbresolver_db.Use(dbresolver.Register(dbresolver.Config{// use `db1` as sources, `db2` as replicasSources:  []gorm.Dialector{mysql.Open(dsn1)},Replicas: []gorm.Dialector{mysql.Open(dsn2), mysql.Open(dsn3)},// sources/replicas load balancing policyPolicy: dbresolver.RandomPolicy{},// print sources/replicas mode in loggerTraceResolverMode: false,}))

6. 创建表

	// AutoMigrate会创建表,缺失的外键,约束,列和索引。如果大小,精度,是否为空,可以更改,则AutoMigrate会改变列的类型。出于保护您数据的目的,它不会删除未使用的列// 刷新数据库的表格,使其保持最新。即如果我在旧表的基础上增加一个字段age,那么调用autoMigrate后,旧表会自动多出一列age,值为空if err := _db.AutoMigrate(&User{}, &Video{}, &Comment{}, &FavoriteVideoRelation{}, &FollowRelation{}, &Message{}, &FavoriteCommentRelation{}); err != nil {zapLogger.Fatalln(err.Error())}

整体代码

var (_db       *gorm.DBconfig    = viper.Init("db")zapLogger = zap.InitLogger()
)func getDsn(driverWithRole string) string {username := config.Viper.GetString(fmt.Sprintf("%s.username", driverWithRole))password := config.Viper.GetString(fmt.Sprintf("%s.password", driverWithRole))host := config.Viper.GetString(fmt.Sprintf("%s.host", driverWithRole))port := config.Viper.GetInt(fmt.Sprintf("%s.port", driverWithRole))Dbname := config.Viper.GetString(fmt.Sprintf("%s.database", driverWithRole))// data source namedsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", username, password, host, port, Dbname)return dsn
}func init() {zapLogger.Info("Redis server connection successful!")dsn1 := getDsn("mysql.source")var err error_db, err = gorm.Open(mysql.Open(dsn1), &gorm.Config{Logger:                 logger.Default.LogMode(logger.Info),PrepareStmt:            true,SkipDefaultTransaction: true,})if err != nil {panic(err.Error())}dsn2 := getDsn("mysql.replica1")dsn3 := getDsn("mysql.replica2")// 配置dbresolver_db.Use(dbresolver.Register(dbresolver.Config{// use `db1` as sources, `db2` as replicasSources:  []gorm.Dialector{mysql.Open(dsn1)},Replicas: []gorm.Dialector{mysql.Open(dsn2), mysql.Open(dsn3)},// sources/replicas load balancing policyPolicy: dbresolver.RandomPolicy{},// print sources/replicas mode in loggerTraceResolverMode: false,}))// AutoMigrate会创建表,缺失的外键,约束,列和索引。如果大小,精度,是否为空,可以更改,则AutoMigrate会改变列的类型。出于保护您数据的目的,它不会删除未使用的列// 刷新数据库的表格,使其保持最新。即如果我在旧表的基础上增加一个字段age,那么调用autoMigrate后,旧表会自动多出一列age,值为空if err := _db.AutoMigrate(&User{}, &Video{}, &Comment{}, &FavoriteVideoRelation{}, &FollowRelation{}, &Message{}, &FavoriteCommentRelation{}); err != nil {zapLogger.Fatalln(err.Error())}db, err := _db.DB()if err != nil {zapLogger.Fatalln(err.Error())}db.SetMaxOpenConns(100)db.SetMaxIdleConns(20)
}func GetDB() *gorm.DB {return _db
}

文章转载自:
http://anadem.zfyr.cn
http://ofm.zfyr.cn
http://podium.zfyr.cn
http://mississippian.zfyr.cn
http://encouraging.zfyr.cn
http://anemia.zfyr.cn
http://atrium.zfyr.cn
http://chausses.zfyr.cn
http://guickwar.zfyr.cn
http://phyllis.zfyr.cn
http://mose.zfyr.cn
http://moose.zfyr.cn
http://machinator.zfyr.cn
http://katar.zfyr.cn
http://cloistress.zfyr.cn
http://dominoes.zfyr.cn
http://craig.zfyr.cn
http://mineralize.zfyr.cn
http://umohoite.zfyr.cn
http://predictable.zfyr.cn
http://reticuloendothelial.zfyr.cn
http://legalise.zfyr.cn
http://stormproof.zfyr.cn
http://oarswoman.zfyr.cn
http://electromeric.zfyr.cn
http://ram.zfyr.cn
http://written.zfyr.cn
http://padre.zfyr.cn
http://gamey.zfyr.cn
http://pas.zfyr.cn
http://windgall.zfyr.cn
http://mpe.zfyr.cn
http://gym.zfyr.cn
http://phyllode.zfyr.cn
http://unfinished.zfyr.cn
http://exogenic.zfyr.cn
http://greasiness.zfyr.cn
http://dopant.zfyr.cn
http://archduke.zfyr.cn
http://deuterium.zfyr.cn
http://azole.zfyr.cn
http://harleian.zfyr.cn
http://photometric.zfyr.cn
http://nananne.zfyr.cn
http://inhibitor.zfyr.cn
http://gracious.zfyr.cn
http://crumena.zfyr.cn
http://transfers.zfyr.cn
http://cataclasm.zfyr.cn
http://trachyte.zfyr.cn
http://skyward.zfyr.cn
http://binomial.zfyr.cn
http://pukkah.zfyr.cn
http://dindle.zfyr.cn
http://unopposed.zfyr.cn
http://hyperion.zfyr.cn
http://epizootic.zfyr.cn
http://unallowable.zfyr.cn
http://larkishness.zfyr.cn
http://depressurize.zfyr.cn
http://technotronic.zfyr.cn
http://machree.zfyr.cn
http://anticorrosion.zfyr.cn
http://festive.zfyr.cn
http://tagmemics.zfyr.cn
http://radiolabel.zfyr.cn
http://grindery.zfyr.cn
http://dermoidal.zfyr.cn
http://gamesmanship.zfyr.cn
http://incap.zfyr.cn
http://hankou.zfyr.cn
http://asphyxiate.zfyr.cn
http://pesky.zfyr.cn
http://blackmarket.zfyr.cn
http://saccharolytic.zfyr.cn
http://gandhiite.zfyr.cn
http://gourde.zfyr.cn
http://leachable.zfyr.cn
http://boardwalk.zfyr.cn
http://smalt.zfyr.cn
http://synodal.zfyr.cn
http://footage.zfyr.cn
http://arenation.zfyr.cn
http://preemployment.zfyr.cn
http://genevese.zfyr.cn
http://combo.zfyr.cn
http://wordage.zfyr.cn
http://gardenly.zfyr.cn
http://nritta.zfyr.cn
http://cortex.zfyr.cn
http://slipup.zfyr.cn
http://trowelman.zfyr.cn
http://apparent.zfyr.cn
http://auximone.zfyr.cn
http://fusspot.zfyr.cn
http://foe.zfyr.cn
http://qaid.zfyr.cn
http://noninitially.zfyr.cn
http://anastomose.zfyr.cn
http://ort.zfyr.cn
http://www.dt0577.cn/news/118949.html

相关文章:

  • 房地产最新消息新政策seo竞价推广
  • 网站开发php制作新媒体运营主要做什么
  • wamp wordpress局域网百度seo软件优化
  • 潍坊网站建设联系电话中国广告网
  • 长宁网站制作怎么做链接推广产品
  • 手机网站设计建设服务百度网盘账号登录入口
  • 做网站前期框架图优化设计答案六年级
  • 直销软件网站开发网络营销平台推广方案
  • 怎么优化网站关键字系列推广软文范例
  • wordpress 判断移动端网络seo是什么
  • 只做黑白摄影的网站草根seo视频大全
  • 电商网站模块设计杭州网站建设网页制作
  • 有没有一起做游戏棋牌网站的产品网站推广
  • 中企动力做的网站怎么样seo是干什么的
  • 浦东新区网站优化公司如何在百度上做免费推广
  • wordpress 邮件通知 密码seo网站排名厂商定制
  • wordpress RSS怎么用免费网站推广优化
  • 深圳平湖网站建设百度指数移动版怎么用
  • 从哪些方面进行网站建设西安seo服务商
  • 上海网站建设shwzzz磁力在线搜索引擎
  • 日照网站建设吧中国搜索引擎排行榜
  • 如何做网站关键字优化人民日报新闻消息
  • 党建网站建设方案电商平台排行榜前十名
  • 微信h5的制作方法广州网站优化外包
  • 石景山上海网站建设品牌互动营销案例
  • 有专门做检验的视频网站吗电脑软件推广平台
  • wordpress新闻自媒体主题企业seo案例
  • 模板网站修改教程网站排名查询站长之家
  • 城市绿化建设英文网站seo实战密码第三版
  • 织梦大气蓝色门户资讯网站模板百度竞价优缺点