程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 淺談Redis與MySQL的耦合性以及利用管道完成MySQL到Redis的高效遷移

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

編輯:MySQL綜合教程

淺談Redis與MySQL的耦合性以及利用管道完成MySQL到Redis的高效遷移     ㈠ 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]  mysql> desc david_lin;   +---------+-------------+------+-----+---------+-------+   | Field   | Type        | Null | Key | Default | Extra |   +---------+-------------+------+-----+---------+-------+   | id      | int(11)     | NO   | PRI | NULL    |       |   | myname  | varchar(25) | NO   | UNI | NULL    |       |   | mymoney | int(11)     | NO   |     | 0       |       |   +---------+-------------+------+-----+---------+-------+      mysql> select * from david_lin;   +----+--------+---------+   | id | myname | mymoney |   +----+--------+---------+   |  1 | david  |  100000 |   |  2 | rocky  |  200000 |   +----+--------+---------+            ② 編寫導出腳本                        每行數據中執行的 Redis命令如下:             HSET david_lin [myname] [mymoney] [plain]  [root@odd ~]# cat mysql_to_redis.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(hkey), '\r\n',     hkey, '\r\n',     '$', LENGTH(hval), '\r\n',     hval, '\r'   )   FROM (     SELECT     'HSET' AS redis_cmd,     'david' AS redis_key,     myname AS hkey,     mymoney AS hval     FROM david_lin   ) AS t            ③ 開始導入 [plain]  [root@odd ~]# mysql -uroot -poracle test --skip-column-names --raw < mysql_to_redis.sql | redis-cli --pipe   All data transferred. Waiting for the last reply...   Last reply received from server.   errors: 0, replies: 0            ④ 在Redis 裡查詢 [plain]  redis 127.0.0.1:6379> hgetall david   1) "david"   2) "100000"   3) "rocky"   4) "200000"         這裡僅是個 demo、數據量小、不過、看這結果、有些類似行轉列哈、列運算了、有木有 :)       By David Lin     2013-05-30     Good Lucky

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved