优化更新的逻辑,减少数据变更项

This commit is contained in:
liuwei
2026-01-19 15:50:34 +08:00
parent 63943f73ba
commit b62fc929f8

View File

@@ -45,21 +45,24 @@ class ChatroomMemberMonitor:
if changes['has_changes']:
await self._process_changes(group_id, changes, api_members)
# 5. 更新缓存 (将最新的列表保存到数据库)
# 注意:这里我们使用 save_chatroom_member_simple 更新所有成员
# 为了保持一致性,可以选择先删除旧的再插入,或者依赖 save_chatroom_member_simple 的 ON DUPLICATE KEY UPDATE
# 考虑到有人离开,单纯 update 可能不够(离开的人还在库里),所以应该处理删除逻辑
# save_chatroom_member_simple 主要是插入/更新,不会删除不存在的人
# 5. 差异化更新缓存 (只处理变动的数据,避免大批量读写)
# 所以需要从数据库中删除已经离开的成员
# 5.1 删除已经离开的成员
if changes['removed']:
removed_wxids = [m['wxid'] for m in changes['removed']]
self._remove_members_from_db(group_id, removed_wxids)
# 保存/更新现有的成员
if api_members:
self.db.save_chatroom_member_simple(group_id, api_members)
self.logger.info(f"{group_id} 成员缓存已更新")
# 5.2 保存新增的成员
if changes['added']:
self.db.save_chatroom_member_simple(group_id, changes['added'])
self.logger.info(f"{group_id} 新增 {len(changes['added'])}成员缓存")
# 5.3 更新修改的成员
if changes['modified']:
modified_members = [m['member'] for m in changes['modified']]
self.db.save_chatroom_member_simple(group_id, modified_members)
self.logger.info(f"{group_id} 更新 {len(modified_members)} 名成员缓存")
else:
self.logger.info(f"{group_id} 成员无变化")
@@ -77,7 +80,7 @@ class ChatroomMemberMonitor:
'wxid': wxid,
'nick_name': m.get('NickName', ''),
'display_name': m.get('DisplayName', ''),
# 可以在这里添加更多需要对比的字段
'raw_data': m # 保存原始数据用于数据库更新
}
# 构建 DB 成员字典 {wxid: member_info}