將mysql表資料大量匯入redis zset結構中

來源:互聯網
上載者:User

標籤:

       工作中有這樣一個需求,要將使用者的魅力值資料做排行,產生榜單展示前40名,每隔5分鐘重新整理一次榜單。這樣的需求用redis的zset是很方便實現的。但是資料存在mysql的表中,有400多萬條,怎麼將其快速的放入redis中呢?

       一般我們想到是通過程式把資料從mysql中查出來,然後存入redis,但是這樣不僅耗時,而且不能保證寫入redis的資料的準確性,這中間存在一個部署的時差。通過google老師一查原來redis提供了大量匯入資料的功能,原帖地址:

http://baijian.github.io/2013/10/12/import-data-from-mysql-to-redis.html

      下面貼出指令碼和我的一些理解:

mysql -h192.168.2.3 -uskst -p‘password‘ nyx  --skip-column-names --raw < data.sql |/usr/local/redis/bin/redis-cli -h 192.168.2.128 -p 6479 --pipe

前提:在一台裝有mysql服務和redis服務的linux環境下

mysql -h"來源資料庫ip" -u"使用者名稱" -p"密碼" 資料庫名 --skip-column-names --raw < data.sql(後面給出)|/usr/local/redis/bin/redis-cli -h "目標redis的ip"

-p "目標redis連接埠" --pipe

 

以上指令碼很好理解,下面給出data.sql中的指令碼:

SELECT CONCAT(     ‘*4\r\n‘,    ‘$‘,LENGTH(redis_cmd),‘\r\n‘,redis_cmd,‘\r\n‘,    ‘$‘,LENGTH(redis_key),‘\r\n‘,redis_key,‘\r\n‘,    ‘$‘,LENGTH(redis_increment),‘\r\n‘,redis_increment,‘\r\n‘,    ‘$‘,LENGTH(redis_member),‘\r\n‘,redis_member,‘\r‘) FROM (    SELECT ‘ZADD‘ as redis_cmd,‘charmRank:forever:2015-07-14 00:00:00_2050-12-30 23:59:59‘ as redis_key,    charm as redis_increment,    accountId as redis_member      FROM table_name  ) AS name

這個指令碼中:開頭4是指該redis命令有幾個部分,比如我的zadd key score member命令有4部分, 如果是 ZSCORE key member 那麼就是3,其他部分應該都好懂。

 

整個命令執行下來400多萬資料不到1分鐘跑完了,很快而且準確。

 

將mysql表資料大量匯入redis zset結構中

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.