淺談 Redis 與 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效遷移

來源:互聯網
上載者:User

標籤:

http://blog.csdn.net/dba_waterbin/article/details/8996872

   ㈠ Redis 與 MySQL 的耦合性
    
    
    在業務架構早期、我們便該"吃著碗裡的看著鍋裡的"、切莫讓MySQL 有夢、而Redis 無心
    畢竟、有些關係型的結構不適合放到Redis跑、"男女搭配、幹活不累"嘛、推薦讓MySQL與Redis喜結連理
    
    其次、這 2 人、一般是在不同情境做選擇、而不會在效能上選擇、
    只有在 2 者都可用的情況下、綜合效能、硬體成本、營運成本等選擇
    比如、網頁遊戲啟用 Redis+MySQL:
    遊戲中的:好友關係、熱門排行榜、計數器、隊列、cache都很適合通過 Redis來實現
    
    再舉個例子是新浪微博的架構、比如使用者關注關係:

    在 MySQL中是 <粉絲,關注的人>這樣一行一行儲存的。而在 Redis中你可以存成一個set,或者zset等

 

          

 

 

    大體流程是由 MySQL 複製到 Redis 的
    基本結構應該是:
    1. 發微博-- > 進入訊息佇列-- > 存入MySQL-- > 複製到Redis
    2. 查詢 -- > 查詢快取-- > 查詢Redis -- > 查詢MySQL
    
    
    
    ㈡ 快速遷移 MySQL →→ Redis 


    
       ① MySQL 要匯出的表 david_lin

 

 

[plain] view plaincopyprint? 
  1. mysql> desc david_lin;  
  2. +---------+-------------+------+-----+---------+-------+  
  3. | Field   | Type        | Null | Key | Default | Extra |  
  4. +---------+-------------+------+-----+---------+-------+  
  5. | id      | int(11)     | NO   | PRI | NULL    |       |  
  6. | myname  | varchar(25) | NO   | UNI | NULL    |       |  
  7. | mymoney | int(11)     | NO   |     | 0       |       |  
  8. +---------+-------------+------+-----+---------+-------+  
  9.   
  10. mysql> select * from david_lin;  
  11. +----+--------+---------+  
  12. | id | myname | mymoney |  
  13. +----+--------+---------+  
  14. |  1 | david  |  100000 |  
  15. |  2 | rocky  |  200000 |  
  16. +----+--------+---------+  

 

 

       ② 編寫匯出指令碼
          
            每行資料中執行的 Redis命令如下:
            HSET david_lin [myname] [mymoney]

 

[plain] view plaincopyprint? 
  1. [[email protected] ~]# cat mysql_to_redis.sql   
  2. SELECT CONCAT(  
  3.   "*4\r\n",  
  4.   ‘$‘, LENGTH(redis_cmd), ‘\r\n‘,  
  5.   redis_cmd, ‘\r\n‘,  
  6.   ‘$‘, LENGTH(redis_key), ‘\r\n‘,  
  7.   redis_key, ‘\r\n‘,  
  8.   ‘$‘, LENGTH(hkey), ‘\r\n‘,  
  9.   hkey, ‘\r\n‘,  
  10.   ‘$‘, LENGTH(hval), ‘\r\n‘,  
  11.   hval, ‘\r‘  
  12. )  
  13. FROM (  
  14.   SELECT  
  15.   ‘HSET‘ AS redis_cmd,  
  16.   ‘david‘ AS redis_key,  
  17.   myname AS hkey,  
  18.   mymoney AS hval  
  19.   FROM david_lin  
  20. ) AS t  



       ③ 開始匯入

 

 

[plain] view plaincopyprint? 
  1. [[email protected] ~]# mysql -uroot -poracle test --skip-column-names --raw < mysql_to_redis.sql | redis-cli --pipe  
  2. All data transferred. Waiting for the last reply...  
  3. Last reply received from server.  
  4. errors: 0, replies: 0  



       ④ 在Redis 裡查詢

 

 

[plain] view plaincopyprint? 
  1. redis 127.0.0.1:6379> hgetall david  
  2. 1) "david"  
  3. 2) "100000"  
  4. 3) "rocky"  
  5. 4) "200000"  



    這裡僅是個 demo、資料量小、不過、看這結果、有些類似行轉列哈、列運算了、有木有 :)

淺談 Redis 與 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效遷移

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.