淺談 Redis 與 MySQL 的耦合性以及利用管道完成 MySQL 到 Redis 的高效遷移
㈠ Redis 與 MySQL 的耦合性
在業務架構早期、我們便該"吃著碗裡的看著鍋裡的"、切莫讓MySQL 有夢、而Redis 無心
畢竟、有些關係型的結構不適合放到Redis跑、"男女搭配、幹活不累"嘛、推薦讓MySQL與Redis喜結連理
其次、這 2 人、一般是在不同場景做選擇、而不會在效能上選擇、
只有在 2 者都可用的情況下、綜合效能、硬體成本、運維成本等選擇
比如、網頁遊戲啟用 Redis+MySQL:
遊戲中的:好友關係、排行榜、計數器、佇列、cache都很適合透過 Redis來實現
再舉個例子是新浪微博的架構、比如使用者關注關係:
每行資料中執行的 Redis命令如下:
HSET david_lin [myname] [mymoney]
③ 開始匯入
④ 在Redis 裡查詢
這裡僅是個 demo、資料量小、不過、看這結果、有些類似行轉列哈、列運算了、有木有 :)
<!-- Baidu Button BEGIN -->
在業務架構早期、我們便該"吃著碗裡的看著鍋裡的"、切莫讓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
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]
[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
③ 開始匯入
[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 裡查詢
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
相關文章
- 從MySQL到Redis提升資料遷移的效率MySqlRedis
- sqlldr 完成mysql到oracle的資料遷移MySqlOracle
- 談談Redis快取中MySQL的資料如何與Redis同步Redis快取MySql
- 淺談Redis的隱性成本Redis
- 談談mysql和redis的區別MySqlRedis
- 藉助ogg完成oracle到mysql的資料遷移OracleMySql
- docker 容器操作、應用部署、mysql,redis,nginx、遷移與備份、DockerfileDockerMySqlRedisNginx
- 【Redis】 redis資料遷移Redis
- KV上MySQL與Redis的PKMySqlRedis
- 【Redis】redis遷移資料到redis-clusterRedis
- Redis鍵遷移Redis
- MySQL 與 Redis 快取的同步方案MySqlRedis快取
- 線上redis遷移思路Redis
- redis資料遷移Redis
- MySQL與SQLite的區別及遷移MySqlSQLite
- redis管道Redis
- mysql與redis的區別與使用場景MySqlRedis
- [Redis] 淺談Redis內的幾種資料型別Redis資料型別
- 探索Redis與MySQL的雙寫問題RedisMySql
- 淺談redis持久化Redis持久化
- Redis資料遷移同步工具(redis-shake)Redis
- redis資料庫遷移Redis資料庫
- 從Firebase+Redis遷移到PlanetScale+MySQLRedisMySql
- 磁碟、mysql、redis、hana 的故事!MySqlRedis
- Oracle 利用RMAN 完成資料遷移Oracle
- Redis管道技術的使用Redis
- 從MySQL到ORACLE程式遷移的注意事項(轉)MySqlOracle
- yugong之多張表oracle到mysql遷移GoOracleMySql
- 【MySQL】淺談MySQL優化MySql優化
- 面試官:談談Redis快取和MySQL資料一致性問題面試Redis快取MySql
- 【MySQL】淺談一致性讀MySql
- 【PyTHON】redis資料遷移PythonRedis
- 【轉】mysql 和 redis的區別MySqlRedis
- 淺談MySQL的B樹索引與索引優化MySql索引優化
- Django應用資料庫從MySQL到PostgreSql的遷移Django資料庫MySql
- 圖解Redis,談談Redis的持久化,RDB快照與AOF日誌圖解Redis持久化
- 淺談:redis的主從複製 + 哨兵模式Redis模式
- yugong之單張表oracle到mysql遷移GoOracleMySql