优化游戏数据批量持久化性能

- gameAct: 新增SaveV2Batch批量处理方法
  - 使用Redis MGET批量获取替代逐个GET
  - 使用WHERE uid IN批量查询替代逐个查询
  - 使用Batch批量插入替代逐条SQL
  - 修复: 只有数据库写入成功后才删除Redis key

- gameKv: 新增SavesV2Batch批量处理方法
  - 同样的批量优化策略
  - 修复: 只有数据库写入成功后才删除Redis key

- service: 更新接口定义添加新方法

性能提升: 1000条数据从1000次网络请求减少到2-3次
This commit is contained in:
ayflying
2026-02-26 15:44:14 +08:00
parent 8ed8152f79
commit 713a63356e
5 changed files with 397 additions and 80 deletions

131
README.md
View File

@@ -23,6 +23,75 @@ go get github.com/ayflying/utility_go
## 🏗️ 项目结构
```
utility_go/
├── api/ # API接口定义 (protobuf)
│ └── system/ # 系统API
├── aycache/ # Aycache缓存实现
├── cmd/ # CLI命令工具
│ ├── make.go # 代码生成器
│ ├── load.go # 配置加载
│ ├── update.go # 更新工具
│ └── middleware.go # 中间件工具
├── config/ # 配置管理
├── controller/ # 控制器层
│ └── callback/ # 回调控制器
├── internal/ # 内部核心逻辑
│ ├── boot/ # 启动初始化
│ ├── game/ # 游戏逻辑
│ ├── logic/ # 业务逻辑
│ │ ├── casdoor/ # 认证逻辑
│ │ ├── gameAct/ # 游戏活动
│ │ ├── gameKv/ # 游戏键值存储
│ │ ├── ip2region/ # IP区域查询
│ │ ├── logData/ # 日志处理
│ │ ├── os/ # 系统操作
│ │ ├── systemCron/ # 定时任务
│ │ └── systemLog/ # 系统日志
│ └── model/ # 数据模型
│ ├── do/ # 数据对象
│ └── entity/ # 实体定义
├── package/ # 功能包
│ ├── aycache/ # 缓存管理
│ ├── excel/ # Excel处理
│ ├── gamelog/ # 游戏日志
│ ├── pay/ # 支付集成
│ │ ├── alipay/ # 支付宝
│ │ ├── apple/ # Apple Pay
│ │ ├── playstore/ # Google Play
│ │ ├── wechat/ # 微信支付
│ │ ├── xiaomi/ # 小米支付
│ │ ├── vivo/ # Vivo支付
│ │ ├── oppo/ # OPPO支付
│ │ ├── huawei/ # 华为支付
│ │ ├── honor/ # 荣耀支付
│ │ ├── taptap/ # TapTap支付
│ │ └── chongchong/ # 充值渠道
│ ├── rank/ # 排名算法
│ └── s3/ # S3存储
├── pkg/ # 公共包
│ ├── config/ # 配置包
│ ├── elasticsearch/ # ES包
│ ├── notice/ # 通知包
│ ├── rank/ # 排名包
│ └── s3/ # S3包
├── service/ # 服务层
│ ├── casdoor.go # 认证服务
│ ├── game_act.go # 游戏活动服务
│ ├── game_kv.go # 键值存储服务
│ ├── ip_2_region.go # IP地理位置服务
│ ├── log_data.go # 日志数据服务
│ ├── os.go # 操作系统服务
│ ├── system_cron.go # 定时任务服务
│ └── system_log.go # 系统日志服务
├── tools/ # 工具函数
│ ├── random.go # 随机数
│ ├── redis.go # Redis操作
│ ├── time.go # 时间处理
│ └── tools.go # 通用工具
├── utility.go # 主入口
├── go.mod # 模块定义
└── README.md # 说明文档
```
utility_go/
├── api/ # API接口定义
@@ -156,6 +225,68 @@ import (
)
```
#### Vivo 支付
```go
import "github.com/ayflying/utility_go/package/pay/vivo"
// 创建vivo支付客户端
client := vivo.NewClient(appId, appKey, businessId)
// 验证支付回调
result, err := client.VerifyNotification(notifyReq)
```
#### 小米支付
```go
import "github.com/ayflying/utility_go/package/pay/xiaomi"
// 处理小米支付回调
result, err := xiaomi.VerifyPayment(orderId, signature, requestBody)
```
#### OPPO 支付
```go
import "github.com/ayflying/utility_go/package/pay/oppo"
// 创建OPPO支付客户端
client := oppo.NewClient(apiKey, apiSecret)
// 验证订单
orderInfo, err := client.VerifyOrder(serverOrderId)
```
#### 华为支付
```go
import "github.com/ayflying/utility_go/package/pay/huawei"
// 处理华为支付通知
notification, err := huawei.ParseNotification(requestBody)
```
#### TapTap 支付
```go
import "github.com/ayflying/utility_go/package/pay/taptap"
// 验证TapTap签名
isValid := taptap.VerifySign(params, signature)
```
#### 荣耀支付
```go
import "github.com/ayflying/utility_go/package/pay/honor"
// 处理荣耀支付回调
result, err := honor.ParseNotification(requestBody)
```
#### 充值渠道支付
```go
import "github.com/ayflying/utility_go/package/pay/chongchong"
// 充值渠道订单验证
result, err := chongchong.VerifyOrder(orderId, channelOrderId)
```
### 🏆 排名模块 (package/rank)
基于Redis的高性能排行榜实现