MYSQL快速同步資料到Redis

2021-09-02 21:11:49 字數 1687 閱讀 9517

舉例場景:儲存遊戲玩家的任務資料,遊戲伺服器啟動時將mysql中玩家的資料同步到redis中。

從mysql中將資料匯入到redis的hash結構中。當然,最直接的做法就是遍歷mysql資料,一條一條寫入到redis中。這樣沒什麼錯,但是速度會非常慢。如果能夠想法使得mysql的查詢輸出資料直接能夠與redis命令列的輸入資料協議相吻合,可以節省很多消耗和縮短時間。

mysql資料庫名稱為:game_db, 表結構舉例:

create

table table_mission (

playerid int(11) unsigned

notnull,

missionlist varchar(255) not

null,

primary key (playerid)

);

redis中的資料結構使用雜湊表:

鍵key為mission, 雜湊域為mysql中對應的playerid, 雜湊值為mysql中對應的missionlist。 資料如下:

[root@iz23zcsdouzz ~]# redis-cli

127.0.0.1:6379> hget missions 36598

",\"

10002\":,\"

10003\":,\"

10004\":}"

快速同步方法:

新建乙個字尾.sql檔案:mysql2redis_mission.sql

內容如下:

select

concat(

"*4\r\n",

'$', length(redis_cmd), '\r\n',

redis_cmd, '\r\n',

'$', length(redis_key), '\r\n',

redis_key, '\r\n',

'$', length(hkey), '\r\n',

hkey, '\r\n',

'$', length(hval), '\r\n',

hval, '\r'

)from (

select

'hset'

as redis_cmd,

'missions'

as redis_key,

playerid as hkey,

missionlist as hval

from table_mission

) as

t

建立shell指令碼mysql2redis_mission.sh

內容:

mysql game_db --skip-column-names --raw < mission.sql | redis-cli --pipe
linux系統終端執行該shell指令碼或者直接執行該系統命令,即可將mysql資料庫game_db的表table_mission資料同步到redis中鍵missions中去。mysql2redis_mission.sql檔案就是將mysql資料的輸出資料格式和redis的輸入資料格式協議相匹配,從而大大縮短了同步時間。

經過測試,同樣乙份資料通過單條取出修改資料格式同步寫入到redis消耗的時間為5min, 使用上面的sql檔案和shell命令,同步完資料僅耗時3s左右。

MYSQL快速同步資料到Redis

舉例場景 儲存遊戲玩家的任務資料,遊戲伺服器啟動時將mysql中玩家的資料同步到redis中。當然你可以如下思路 今天我們用linux系統終端執行該shell指令碼或者直接執行該系統命令,即可將mysql資料庫game db的表table mission資料同步到redis中鍵missions中去。...

mysql資料快速同步到redis

由於工作中有時需要把mysql的資料同步到redis,用python的redis庫一條條塞進去太過耗時,查了下資料發現可以用redis協議快速實現。一 redis協議的格式 引數個數 r n 引數a位元組長度 r n 引數a r n 引數b位元組長度 r n 引數b r n 比如 sadd name...

Oracle同步資料到MySQL

oracle同步資料到mysql 1 首先在treesoft資料庫中配置兩個資料來源資訊 2 配置資料同步任務,並執行任務 3 同步結果資料檢視確認 4 目前treesoft支援以下資料同步方案 1 mysql同步資料到oracl 2 mysql同步資料到postgresql 3 mysql同步資料...