HomeServer/Server/AllServer/GameServer/MigrateData.lua

64 lines
2.7 KiB
Lua
Raw Permalink Normal View History

2024-11-20 15:41:09 +08:00
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