diff --git a/service/userService.go b/service/userService.go index 0a7985e..db86c03 100644 --- a/service/userService.go +++ b/service/userService.go @@ -131,9 +131,13 @@ func UserSyncDataFromMaster() { // 同步数据到主服务器-增删改数据 func GetUserSyncData(device string) proto.UserSyncResp { key := device + "_sync_user_ids" - add_user_ids := worker.GetRedisSetMembers(key + "_add") - update_user_ids := worker.GetRedisSetMembers(key + "_update") - delete_user_ids := worker.GetRedisSetMembers(key + "_delete") + add_temp_key := device + "_sync_user_ids_add_confirm_temp" + update_temp_key := device + "_sync_user_ids_update_confirm_temp" + delete_temp_key := device + "_sync_user_ids_delete_confirm_temp" + //需要获取暂存集合的并集,清空暂存集合,存入待确认集合 + add_user_ids := worker.GetRedisSetUnion(key+"_add", add_temp_key) + update_user_ids := worker.GetRedisSetUnion(key+"_update", update_temp_key) + delete_user_ids := worker.GetRedisSetUnion(key+"_delete", delete_temp_key) add_users := []dao.User{} update_users := []dao.User{} delete_users := []proto.UserDelID{} @@ -153,16 +157,13 @@ func GetUserSyncData(device string) proto.UserSyncResp { id, _ := strconv.Atoi(v) delete_users = append(delete_users, proto.UserDelID{ID: uint(id)}) } - //将id存入暂存集合,清空原集合 - add_temp_key := device + "_sync_user_ids_add_confirm_temp" - update_temp_key := device + "_sync_user_ids_update_confirm_temp" - delete_temp_key := device + "_sync_user_ids_delete_confirm_temp" + //将id存入暂存集合,清空原集合,存入待确认集合主要保证在确认时,有新的数据加入不会在确认时漏掉 worker.SetRedisSetUnionAndStore(add_temp_key, key+"_add") - worker.SetRedisSetClear(key + "_add") + worker.ClearRedisSet(key + "_add") worker.SetRedisSetUnionAndStore(update_temp_key, key+"_update") - worker.SetRedisSetClear(key + "_update") + worker.ClearRedisSet(key + "_update") worker.SetRedisSetUnionAndStore(delete_temp_key, key+"_delete") - worker.SetRedisSetClear(key + "_delete") + worker.ClearRedisSet(key + "_delete") return proto.UserSyncResp{Add: add_users, Update: update_users, Delete: delete_users} } diff --git a/worker/redis.go b/worker/redis.go index 84bc598..ae83f49 100644 --- a/worker/redis.go +++ b/worker/redis.go @@ -449,3 +449,14 @@ func ClearRedisSet(key string) bool { } return true } + +// 获取两个集合的并集 +func GetRedisSetUnion(key1 string, key2 string) []string { + ctx := context.Background() + val, err := RedisClient.SUnion(ctx, key1, key2).Result() + if err != nil { + fmt.Println("Error getting key: %v", err) + return nil + } + return val +}