64 lines
2.7 KiB
Lua
64 lines
2.7 KiB
Lua
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
|