HomeServer/Server/AllServer/GameServer/MigrateData.lua
2024-11-20 15:41:37 +08:00

64 lines
2.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

local skynet = require "skynet"
local oo = require "Class"
local log = require "Log"
local pb = require "pb"
local errorInfo = require "ErrorInfo"
local dataType = require "DataType"
local redisKeyUrl = require "RedisKeyUrl"
local MigrateData = oo.class()
function MigrateData:Init()
end
--迁移账号数据
function MigrateData:AccountData( account )
if skynet.server.gameConfig:IsMultiRedis() then
--开启了多redis
local curAccountRedis = skynet.server.redisCenter:GetAccountRedis( account )
local redisUserListKey = string.format(redisKeyUrl.AccountServerUserList , account )
--并且指定redis没有玩家数据
if not curAccountRedis:exists( redisUserListKey ) then
local redisOldDb = skynet.server.redis:hgetall( redisUserListKey )
redisOldDb = redisKeyUrl:CovertTable( redisOldDb )
if redisOldDb and redisOldDb.DBIndex and redisOldDb.UserID then
--原redis中有数据需要迁移数据
local packData = skynet.server.common:PackData( redisOldDb )
curAccountRedis:hmset( redisUserListKey , table.unpack( packData ))
--先统计起来,后面一起删除
local redisNeedDeleteKey = redisKeyUrl.AccountServerNeedDeleteAccountDataSet
skynet.server.redis:sadd( redisNeedDeleteKey , account )
--skynet.server.redis:del( redisKey ) 暂时不用
log.info("成功迁移账号数据" , account , redisOldDb.DBIndex , redisOldDb.UserID , redisOldDb.PartnerId , redisOldDb.saveMySqlTime , redisOldDb.saveMongoTime )
end
end
end
end
--迁移个人数据
function MigrateData:DetailData( partnerId )
--迁移redis相关
if skynet.server.gameConfig:IsMultiRedis() then
--开启了多redis
local curPartnerRedis = skynet.server.redisCenter:GetPartnerRedis( partnerId ) --根据partnerId来获取redis索引
local redisDetailKey = string.format( redisKeyUrl.GameServerPersonalDetail , partnerId )
if not curPartnerRedis:exists( redisDetailKey ) then
--获取旧redis数据
local redisOldDetail = skynet.server.redis:hgetall( redisDetailKey )
redisOldDetail = redisKeyUrl:CovertTable( redisOldDetail )
--对旧数据进行组装然后迁移数据到新redis
local packData = skynet.server.common:PackData( redisOldDetail )
if #packData > 0 then
curPartnerRedis:hmset( redisDetailKey , table.unpack( packData ) )
end
log.info("成功迁移个人数据" , partnerId )
end
end
end
skynet.server.migrateData = MigrateData
return MigrateData