標籤:
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?
- 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] view plaincopyprint?
- [[email protected] ~]# 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] view plaincopyprint?
- [[email protected] ~]# 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] view plaincopyprint?
- redis 127.0.0.1:6379> hgetall david
- 1) "david"
- 2) "100000"
- 3) "rocky"
- 4) "200000"
這裡僅是個 demo、資料量小、不過、看這結果、有些類似行轉列哈、列運算了、有木有 :)
淺談 Redis 與 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效遷移