mysql資料快速同步到redis

2021-09-09 06:37:36 字數 2284 閱讀 5976

由於工作中有時需要把mysql的資料同步到redis,用python的redis庫一條條塞進去太過耗時,查了下資料發現可以用redis協議快速實現。

一 . redis協議的格式:

*《引數個數》\r\n

$《引數a位元組長度》\r\n《引數a>\r\n

$《引數b位元組長度》\r\n《引數b>\r\n

……

比如

sadd name 李飛
轉換為redis協議格式則為:

*3\r\n$4\r\nsadd\r\n$6\r\n李飛\r
二 . 通過linux命令列傳送協議

echo -en '*3\r\n$4\r\nsadd\r\n$6\r\n李飛\r' | redis-cli --pipe -d 0 -a 945555
# '–pipe』是利用了redis的管道傳輸,能極大的提公升效率

# '|'表示命令行管道符號,符號左側的輸出作為右側的輸入

如果要將mysql資料匯入redis,可以利用mysql語句拼湊出多條redis協議,再利用管道符號傳給redis處理。

首先寫好mysql語句,存入redis_protocol.sql中:

select 

concat("*3\r\n","$4\r\nsadd\r\n","$4\r\nname\r\n","$",length(skey),"\r\n",skey,"\r")

from

(select `name` as skey from column) as t

在命令列執行:

mysql -uroot -ppwd -ddatabase --skip-column-names --raw < redis_protocol.sql | redis-cli --pipe
沒有報錯的話就可以了,再用redis-cli驗證一下是否成功。我試過14萬條資料匯入只需一兩秒,速度非常快。

三 . 附上乙份python實現的**

# coding:utf-8

import subprocess

import redis

import pymysql

dbconfig =

connection = pymysql.connect(**dbconfig)

cursor = connection.cursor()

# 方法一,拼湊redis協議使用命令列操作

def use_cmd():

cursor.execute(

"""select concat("*3\r\n","$4\r\nsadd\r\n","$4\r\nnames\r\n","$",length(skey),"\r\n",skey,"\r")

from (select `name` as skey from column) as t;

""") for redis_protocol in cursor.fetchall():

redis_protocol = redis_protocol.replace("\r", r"\r").replace('\n', r'\n') # 防止轉義

# 開啟子程序執行命令

sub = subprocess.popen(

r"echo -en '%s' | redis-cli --pipe -d 0 -a 945555" % redis_protocol,

shell=true, stdout=subprocess.pipe

)std = sub.communicate() # 獲取輸出,格式為[stdout, stderr]

print(std[0].decode('gbk'))

# 方法二,使用redis庫封裝的pipeline方法

def use_package():

cursor.execute('select `name` from ic_basic')

redis_con = redis.redis(host="127.0.0.1", port=6379, db=0, decode_responses=true)

p = redis_con.pipeline()

for record in cursor.fetchall():

name = record[0]

p.sadd('names', name)

replies = p.execute()

print(replies)

MYSQL快速同步資料到Redis

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

MYSQL快速同步資料到Redis

舉例場景 儲存遊戲玩家的任務資料,遊戲伺服器啟動時將mysql中玩家的資料同步到redis中。從mysql中將資料匯入到redis的hash結構中。當然,最直接的做法就是遍歷mysql資料,一條一條寫入到redis中。這樣沒什麼錯,但是速度會非常慢。如果能夠想法使得mysql的查詢輸出資料直接能夠與...

Oracle同步資料到MySQL

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