Mysql到Redis的数据协议(可以按照写redis的协议,自测已经成功,key值可以自己变化,不一定非要是id)
redis-cli命令行工具有一個(gè)批量插入模式,是專門為批量執(zhí)行命令設(shè)計(jì)的。這第一步就是把Mysql查詢的內(nèi)容格式化成redis-cli可用的數(shù)據(jù)格式。
原理是把要插入到Redis的數(shù)據(jù)直接轉(zhuǎn)成Redis協(xié)議數(shù)據(jù)流,通過pipe mode?導(dǎo)入到Redis.
Redis協(xié)議:
*<args><cr><lf> 參數(shù)個(gè)數(shù)
$<len><cr><lf> 第一個(gè)參數(shù)長(zhǎng)度
<arg0><cr><lf> 第一個(gè)參數(shù)
$<len><cr><lf> 第二個(gè)參數(shù)長(zhǎng)度
<arg1><cr><lf> 第二個(gè)參數(shù)
…
$<len><cr><lf> 第n個(gè)參數(shù)長(zhǎng)度
<argN><cr><lf> 第n個(gè)參數(shù)
?
| CREATE TABLE `t_info` ( `Fuid`?????????? bigint(64)????? unsigned? NOT NULL , `Fnickname` varchar(70)?????????????????? NOT NULL DEFAULT '', `Fsex`????????? 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數(shù)據(jù)組合成Redis協(xié)議數(shù)據(jù)流:
| 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, 'Fsex'????????? AS hkey2,?????? Fsex?????????? AS hval2, 'Fsign'???????? AS hkey3,?????? Fsign????????? AS hval3 FROM t_info ) AS t |
然后shell下執(zhí)行:
| mysql -h 127.0.0.1 db_test –skip-column-names –raw < mysql2redis.sql | redis-cli –pipe |
mysql參數(shù)說明:
–raw: 使mysql不轉(zhuǎn)換字段值中的換行符。
–skip-column-names: 使mysql輸出的每行中不包含列名。
?
?
? 打開Python解釋器:
>>> import redis
>>> r = redis.Redis(host='localhost', port=6379, db=0)?? #如果設(shè)置了密碼,就加上password=密碼
>>> r.keys()?? # 列出所有鍵值。(這時(shí)候已經(jīng)存了4個(gè)了)
?
參考:
http://www.oschina.net/translate/mysql-to-redis-in-one-step
http://redis.io/topics/mass-insert
http://redis.io/topics/protocol
來源:https://blog.csdn.net/llw01/article/details/21872985
總結(jié)
以上是生活随笔為你收集整理的Mysql到Redis的数据协议(可以按照写redis的协议,自测已经成功,key值可以自己变化,不一定非要是id)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: T-38两栖侦察坦克的简介?
- 下一篇: 通过管道传输快速将MySQL的数据导入R