最近有個需求,需要把五千萬條數據批量寫入redis中,方法倒是有很多種!效率最高的就是通過redis-cl管道的方式寫入
一:先看看命令
結構很簡單 redis.txt 是你的文件名稱 后面是你的客戶端
二:redis.txt 的 文件格式
2.1 redis.txt的格式一
有兩種文件格式 都是可以的
eg: set yutes testsss
解釋:
eg:
*3 表示有三個字符
$3 表示 set字符長度為3 也就是我們的命令
$5表示 yutes的長度為5 也就是我們的key
$7表示 testsss的長度為7 也就是我們的value
不同的字符直接 需要用換行隔開 例如緊接着下一個是 set ymy testvalue
另外一種方式 就比較簡單直觀
2.2 redis.txt的格式二
把需要的自己這樣寫就行
三:文件格式轉碼
上面的命令會去掉行尾的^M符號
四:執行命令就可以了 如圖
四:總結
導入3250萬數據大概用了 1分30秒左右
而這種方式 用了30多分鍾!
遇到的坑
1: 沒有 unix2dos 命令
apt install unix2dos 沒有成功 提示 找不到 unix2dos pkg
更新 apt ,sudo apt update ,但是仍然找不到 unix2dos
添加 apt的源
vim /etc/apt/sources.list
可以參考鏈接 https://www.cnblogs.com/webnote/p/5767853.html
我的list為:
deb http://archive.ubuntu.com/ubuntu bionic main
deb http://archive.ubuntu.com/ubuntu bionic-security main
deb http://archive.ubuntu.com/ubuntu bionic-updates main
deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse
然后在重新sudo apt update 在 apt install unix2dos 或者 sudo apt-get install tofrodos
2: 上面的文件格式轉碼是
是 unix2dos filename 而不是 dos2unix filename
3: 集群模式下 如何寫入
如果不通過 pipe 我們可以通過 redis-cli -c 來啟動redis集群模式
但是通過 --pipe 來啟動集群模式的話 會 提示 MOVEN *** 172.20.**** 錯誤
那么解決方案有兩種
一:暴力型的
你在集群模式下 --pipe 你會發現 key值的redis槽點在 此節點上 就寫入成功了 不在此節點 就沒有寫入成功
那我們可以把每個節點跑 --pipe 一次,那么每個節點 就會寫入自己的數據
二:細致型
通過key 的哈希值 區分槽點,通過節點拿到槽點,,嗯嗯 有點麻煩!詳細看鏈接
可以參考鏈接:https://blog.csdn.net/kevin_pso/article/details/53945053
參考文檔:https://blog.csdn.net/u014078154/article/details/79316430