日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Mysql到Redis的数据协议(可以按照写redis的协议,自测已经成功,key值可以自己变化,不一定非要是id)

發布時間:2024/9/20 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mysql到Redis的数据协议(可以按照写redis的协议,自测已经成功,key值可以自己变化,不一定非要是id) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis-cli命令行工具有一個批量插入模式,是專門為批量執行命令設計的。這第一步就是把Mysql查詢的內容格式化成redis-cli可用的數據格式。
原理是把要插入到Redis的數據直接轉成Redis協議數據流,通過pipe mode?導入到Redis.

Redis協議:
*<args><cr><lf> 參數個數

$<len><cr><lf> 第一個參數長度
<arg0><cr><lf> 第一個參數
$<len><cr><lf> 第二個參數長度
<arg1><cr><lf> 第二個參數

$<len><cr><lf> 第n個參數長度
<argN><cr><lf> 第n個參數

?

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數據組合成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,
'Fsex'????????? AS hkey2,?????? Fsex?????????? 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個了)

?

參考:
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

總結

以上是生活随笔為你收集整理的Mysql到Redis的数据协议(可以按照写redis的协议,自测已经成功,key值可以自己变化,不一定非要是id)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。