1 Star 0 Fork 0

liujinsuo/tool

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
jump_live_config.go 7.20 KB
一键复制 编辑 原始数据 按行查看 历史
liujinsuo@mobiexchanger.com 提交于 2022-11-06 22:24 . MysqlSaveConfig
package main
import (
"fmt"
"gitee.com/liujinsuo/tool"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/logger"
"log"
"os"
"time"
)
type jumpLiveConfigVal struct {
MatchDuration int `json:"match_duration" comment:"匹配时长 秒"` //匹配时长 秒
HeartbeatIntervalSeconds int `json:"heartbeat_interval_seconds" comment:"客户端配置: 心跳间隔 秒,间隔HeartbeatIntervalSeconds秒发送一次心跳"` //客户端配置: 心跳间隔 秒,间隔HeartbeatIntervalSeconds秒发送一次心跳
WsBreakReconnection int `json:"ws_break_reconnection" comment:"客户端配置: websocket断开重试(重连)等待时间 秒"` //客户端配置: websocket断开重试(重连)等待时间 秒
WsHeartbeatTimeout int `json:"ws_heartbeat_timeout" comment:"客户端配置: 心跳超时时间,发送心跳后 WsHeartbeatTimeout 秒收不到心跳就断开连接"` //客户端配置: 心跳超时时间,发送心跳后 WsHeartbeatTimeout 秒收不到心跳就断开连接
TodayCoinNumber int64 `json:"today_coin_number" comment:"每日最大获得金币数"` //每日最大获得金币数
TodayBeanNumber int64 `json:"today_bean_number" comment:"每日最大获得金豆数"` //每日最大获得金豆数
HeartbeatOvertime int `json:"heartbeat_overtime" comment:"超过HeartbeatOvertime收不到客户端的消息算离线"` //超过HeartbeatOvertime收不到客户端的消息算离线
TimeoutExitDuration int `json:"timeout_exit_duration" comment:"超时退出等待时长"` //超时退出等待时长
HeartbeatRedisSaveDuration int `json:"heartbeat_redis_save_duration" comment:"心跳在redis保存的时长 秒"` //心跳在redis保存的时长 秒
Blocks []int64 `json:"blocks" comment:"每个块的得分配置"` //每个块的得分配置
LogMatch bool `json:"log_match" comment:"匹配日志 true开启 false关闭"` //匹配日志 true开启 false关闭
}
func (s *jumpLiveConfigVal) Default() any {
return &jumpLiveConfigVal{
MatchDuration: 20, //匹配时长 秒
HeartbeatIntervalSeconds: 5, //客户端配置: 心跳间隔 秒,间隔HeartbeatIntervalSeconds秒发送一次心跳
WsBreakReconnection: 2, //客户端配置: websocket断开重试(重连)等待时间 秒
WsHeartbeatTimeout: 10, //客户端配置: 心跳超时时间,发送心跳后 WsHeartbeatTimeout 秒收不到心跳就断开连接
TodayCoinNumber: 20000000, //每日最大获得金币数
TodayBeanNumber: 10000000, //每日最大获得金豆数
HeartbeatOvertime: 10, //超过HeartbeatOvertime收不到客户端的消息算离线
TimeoutExitDuration: 5, //超时退出等待时长
HeartbeatRedisSaveDuration: 20, //心跳在redis保存的时长 秒
Blocks: []int64{1, 2, 3, 4}, //每个块的得分配置
LogMatch: true, //匹配日志 true开启 false关闭
}
}
func main() {
mysqlDb := connectMysql() //连接mysql
SaveConfig := tool.NewMysqlSaveConfig("jump_live_config", "跳一跳直播配置表", "jump_live_config", mysqlDb, &jumpLiveConfigVal{})
if err := SaveConfig.CreateTable(); err != nil {
panic(err)
}
//写入数据
if err := SaveConfig.Add((&jumpLiveConfigVal{}).Default()); err != nil {
panic("写入数据失败")
}
rt := jumpLiveConfigVal{}
if err := SaveConfig.Get(&rt); err != nil {
fmt.Println("获取数据失败")
}
}
// 连接mysql
func connectMysql() *gorm.DB {
type Database struct {
Host string `koanf:"host"`
Port int `koanf:"port"`
MaxOpenConns int `koanf:"MaxOpenConns"`
Enabled bool `koanf:"enabled"`
Username string `koanf:"username"`
Password string `koanf:"password"`
Dbname string `koanf:"dbname"`
MaxIdleConns int `koanf:"max_idle_conns"`
ConnMaxLifetime int `koanf:"conn_max_lifetime"`
SlowThresholdMs int `koanf:"slow_threshold_ms"` //慢 SQL 阈值 毫秒
GormLogLevel int `koanf:"gorm_log_level"`
}
//配置自己的mysql信息
mysqlConfig := Database{
Host: "",
Port: 0,
MaxOpenConns: 0,
Enabled: false,
Username: "",
Password: "",
Dbname: "",
MaxIdleConns: 0,
ConnMaxLifetime: 0,
SlowThresholdMs: 0,
GormLogLevel: 0,
}
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags|log.Lshortfile), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
logger.Config{
SlowThreshold: time.Millisecond * 500, // 慢 SQL 阈值
LogLevel: logger.LogLevel(mysqlConfig.GormLogLevel), // 日志级别 silent不打印日志 info打印所有日志
IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误
Colorful: true, // 禁用彩色打印
},
)
dns := fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=utf8mb4&parseTime=True&loc=Local", mysqlConfig.Username, mysqlConfig.Password, mysqlConfig.Host, mysqlConfig.Port, mysqlConfig.Dbname)
db, err := gorm.Open(mysql.New(mysql.Config{
DriverName: "mysql", //驱动名
ServerVersion: "", //不知道怎么用
DSN: dns, //连接
Conn: nil, //GORM 允许通过一个现有的数据库连接来初始化 *gorm.DB
SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置
DefaultStringSize: 0, // string 类型字段的默认长度
DefaultDatetimePrecision: nil, //不知道怎么用
DisableDatetimePrecision: false, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
DontSupportRenameIndex: false, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
DontSupportRenameColumn: false, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
DontSupportForShareClause: false, //不知道怎么用
DontSupportNullAsDefaultValue: false, //不知道怎么用
}), &gorm.Config{
Logger: newLogger,
})
if err != nil {
panic(err)
}
sqlDB, err := db.DB()
if err != nil {
panic(err)
}
// SetMaxIdleConns 设置空闲连接池中的最大连接数。
sqlDB.SetMaxIdleConns(mysqlConfig.MaxIdleConns)
// SetMaxOpenConns 设置数据库连接最大打开数。
sqlDB.SetMaxOpenConns(mysqlConfig.MaxOpenConns)
// SetConnMaxLifetime 设置可重用连接的最长时间
sqlDB.SetConnMaxLifetime(time.Hour)
return db
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/liujinsuo/tool.git
git@gitee.com:liujinsuo/tool.git
liujinsuo
tool
tool
96876ce2fd59

搜索帮助