Mysql到Redis的資料協議

2021-06-21 03:45:06 字數 1890 閱讀 6094

redis-cli命令列工具有乙個批量插入模式,是專門為批量執行命令設計的。這第一步就是把mysql查詢的內容格式化成redis-cli可用的資料格式。

原理是把要插入到redis的資料直接轉成redis協議資料流,通過pipe mode匯入到redis.

redis協議:

*引數個數

$第乙個引數長度

第乙個引數

$第二個引數長度

第二個引數

…$第n個引數長度

第n個引數

create table `t_info` (

`fuid`           bigint(64)      unsigned  not null ,

`fnickname` varchar(70)                   not null default '',

`f***`          tinyint(3)       unsigned  not null default '0',

`fsign`        varchar(255)                   not null default '',

primary key (`fuid`)

) engine=innodb default charset=utf8;

insert into t_info values('111','llw','1','liu');

編寫sql,把mysql資料組合成redis協議資料流:

select concat(

'*8\r\n',

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

'$', length(hkey1), '\r\n',hkey1, '\r\n','$', length(hval1), '\r\n', hval1, '\r\n'

'$', length(hkey2), '\r\n',hkey2, '\r\n','$', length(hval2), '\r\n', hval2, '\r\n'

'$', length(hkey3), '\r\n',hkey3, '\r\n','$', length(hval3), '\r\n', hval3, '\r'

)from (

select

'hmset'                 as redis_cmd,   fuid            as redis_key,

'fnickname'     as hkey1,       fnickname       as hval1,

'f***'          as hkey2,       f***           as hval2,

'fsign'         as hkey3,       fsign          as hval3

from t_info

) as t

然後shell下執行:

mysql -h 127.0.0.1 db_test –skip-column-names –raw < mysql2redis.sql | redis-cli –pipe

mysql引數說明:

–raw: 使mysql不轉換字段值中的換行符。

–skip-column-names: 使mysql輸出的每行中不包含列名。

開啟python直譯器:

>>> import redis

>>> r = redis.redis(host='localhost', port=6379, db=0)   #如果設定了密碼,就加上password=密碼

>>> r.keys()   # 列出所有鍵值。(這時候已經存了4個了)

參考:

MYSQL快速同步資料到Redis

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

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...