Heim  >  Artikel  >  Datenbank  >  浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁_MySQL

浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁_MySQL

WBOY
WBOYOriginal
2016-06-01 13:34:091188Durchsuche

bitsCN.com

浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁移

 

  ㈠ Redis 与 MySQL 的耦合性

    

    在业务架构早期、我们便该"吃着碗里的看着锅里的"、切莫让MySQL 有梦、而Redis 无心

    毕竟、有些关系型的结构不适合放到Redis跑、"男女搭配、干活不累"嘛、推荐让MySQL与Redis喜结连理

    

    其次、这 2 人、一般是在不同场景做选择、而不会在性能上选择、

    只有在 2 者都可用的情况下、综合性能、硬件成本、运维成本等选择

    比如、网页游戏启用 Redis+MySQL:

    游戏中的:好友关系、排行榜、计数器、队列、cache都很适合通过 Redis来实现

    

    再举个例子是新浪微博的架构、比如用户关注关系:

    在 MySQL中是 这样一行一行存储的。而在 Redis中你可以存成一个set,或者zset等

 

浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁_MySQL

 

    大体流程是由 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

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

bitsCN.com
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn