舉例場景:儲存遊戲玩家的任務資料,遊戲伺服器啟動時將mysql中玩家的資料同步到redis中。
當然你可以如下思路:
今天我們用linux系統終端執行該shell指令碼或者直接執行該系統命令,即可將mysql資料庫game_db的表table_mission資料同步到redis中鍵missions中去。mysql2redis_mission.sql檔案就是將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中。從mysql中將資料匯入到redis的hash結構中。當然,最直接的做法就是遍歷mysql資料,一條一條寫入到redis中。這樣沒什麼錯,但是速度會非常慢。如果能夠想法使得mysql的查詢輸出資料直接能夠與...
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同步資料...