map预分配容量避免动态扩容,优化了返回值复用情况

This commit is contained in:
Cold
2025-12-06 10:13:38 +08:00
committed by 张斌
parent 15ce1cf345
commit 86661c687a
3 changed files with 52 additions and 10 deletions

View File

@@ -90,7 +90,8 @@ func ReadFromStream(ctx context.Context, streamKey, groupName, consumerName stri
// 解析返回值
// 格式: [[streamKey, [[msgID, [field1, value1, field2, value2, ...]], ...]]]
messages := []StreamMessage{}
// 预分配容量,避免动态扩容
messages := make([]StreamMessage, 0, int(count))
if result == nil {
// 超时或没有数据
@@ -130,8 +131,8 @@ func ReadFromStream(ctx context.Context, streamKey, groupName, consumerName stri
continue
}
// 解析字段为 map
values := make(map[string]interface{})
// 解析字段为 map,预分配容量,避免动态扩容
values := make(map[string]interface{}, len(fieldsArray)/2)
for i := 0; i < len(fieldsArray); i += 2 {
if i+1 < len(fieldsArray) {
key := gconv.String(fieldsArray[i])
@@ -154,7 +155,9 @@ func ReadFromStream(ctx context.Context, streamKey, groupName, consumerName stri
// 使用 gredis Do() 方法执行 XACK 命令
func AckMessage(ctx context.Context, streamKey, groupName string, messageIDs ...string) error {
// XACK streamKey groupName messageID1 messageID2 ...
args := []interface{}{streamKey, groupName}
// 预分配容量,避免动态扩容
args := make([]interface{}, 0, len(messageIDs)+2)
args = append(args, streamKey, groupName)
for _, id := range messageIDs {
args = append(args, id)
}
@@ -245,7 +248,8 @@ func ClaimPendingMessage(ctx context.Context, streamKey, groupName, consumerName
return []StreamMessage{}, nil
}
var messages []StreamMessage
// 预分配容量,避免动态扩容
messages := make([]StreamMessage, 0, len(messagesArray))
for _, msgData := range messagesArray {
msgArray, ok := msgData.([]interface{})
if !ok || len(msgArray) < 2 {
@@ -258,12 +262,12 @@ func ClaimPendingMessage(ctx context.Context, streamKey, groupName, consumerName
continue
}
values := make(map[string]interface{})
// 预分配 map 容量 ,避免动态扩容
values := make(map[string]interface{}, len(fieldsArray)/2)
for i := 0; i < len(fieldsArray); i += 2 {
if i+1 < len(fieldsArray) {
key := gconv.String(fieldsArray[i])
val := fieldsArray[i+1]
values[key] = val
values[key] = fieldsArray[i+1]
}
}