ホームページ データベース mysql チュートリアル 浅谈Redis与MySQL的耦合性以及利用管道完成MySQL到Redis的高效迁_MySQL

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

Jun 01, 2016 pm 01:34 PM
パイプライン

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
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Golang でパイプを使用してファイルを読み書きするにはどうすればよいですか? Golang でパイプを使用してファイルを読み書きするにはどうすればよいですか? Jun 04, 2024 am 10:22 AM

パイプを介したファイルの読み取りと書き込み: ファイルからデータを読み取り、パイプを介してデータを渡すためのパイプを作成します。 パイプからデータを受信して​​処理します。 処理されたデータをファイルに書き込みます。 ゴルーチンを使用してこれらの操作を同時に実行し、パフォーマンスを向上させます。

Linux パイプライン コマンドと基本的な使用法の概要 Linux パイプライン コマンドと基本的な使用法の概要 Feb 22, 2024 pm 05:57 PM

Linux のパイプ コマンドは、あるコマンドの出力を別のコマンドの入力として使用して、異なるコマンド間のデータ転送と処理を実現できる強力なツールです。この記事では、Linux のパイプ コマンドの基本、一般的な使用法、コード例を紹介します。パイプライン コマンドの概要 Linux システムでは、パイプライン コマンドは縦棒記号 (|) を使用して 2 つ以上のコマンドを接続します (例: command1|command2)。このようにして、command1 の出力は command2 になります。

Linux パイプラインを使用して作業効率を向上させる Linux パイプラインを使用して作業効率を向上させる Feb 22, 2024 pm 09:30 PM

今日の情報化社会において、コンピュータは私たちの仕事や生活に欠かせないツールとなっています。 Linuxシステムを使いこなすスタッフにとって、Linuxの強力な機能を使いこなすことは業務効率を向上させる上で非常に重要です。この記事では、Linux の重要な機能であるパイプ (Pipes) を使用して、作業プロセスを簡素化し、作業効率を向上させる方法に焦点を当てます。 Linux パイプは、中間結果を保存せずに、あるコマンドの出力を別のコマンドに直接渡すことができる特殊なファイル タイプです。

golangの機能とパイプライン通信の原理 golangの機能とパイプライン通信の原理 May 04, 2024 pm 06:36 PM

Go 言語では、関数とパイプを併用してプロセス間通信を実現します。関数はパイプをパラメーターとして渡し、パイプを介してデータを送受信できます。パイプは、ゴルーチン間でデータを送受信するために使用できるバッファーのないチャネルであり、無向パイプと有向パイプの両方をサポートします。データ送信時に使用します

Go言語でパイプラインを使用してタイムアウトメカニズムを実装するにはどうすればよいですか? Go言語でパイプラインを使用してタイムアウトメカニズムを実装するにはどうすればよいですか? Jun 03, 2024 pm 03:01 PM

パイプを使用してタイムアウト メカニズムを実装します。パイプを作成します。パイプライン内の要素を待機するゴルーチンを作成します。別のゴルーチンで、指定された時間が経過した後にパイプを閉じます。 select ステートメントを使用して、パイプライン要素が到着またはタイムアウトしたときに実行する適切なアクションを選択します。

Golang パイプラインと関数通信の同期メカニズム Golang パイプラインと関数通信の同期メカニズム May 02, 2024 pm 04:21 PM

Go 言語のパイプラインと関数通信の同期メカニズムは、データ送信の順序と安全性を確保するために、パイプライン バッファー ブロッキングを通じて実装されます。具体的には、パイプが空の場合、データの受信はブロックされます。パイプがいっぱいになると、データの送信がブロックされます。実際のケース: フィボナッチ数列を計算し、パイプラインを使用して計算結果の送信を同期します。

Go でパイプを使用してアプリケーションのパフォーマンスを向上させるにはどうすればよいですか? Go でパイプを使用してアプリケーションのパフォーマンスを向上させるにはどうすればよいですか? Jun 05, 2024 pm 05:10 PM

Go のパイプは、ゴルーチン間でデータを安全かつ効率的に転送してアプリケーションのパフォーマンスを向上させるために使用される通信メカニズムです。パイプライン操作には 2 つのタイプがあります。 バッファなし: データは同期的に送受信される必要があります。バッファリング: パイプにはストレージ スペースが割り当てられ、非同期の送受信が可能になります。例: フィボナッチ数列を計算する場合、メインのゴルーチンと計算ゴルーチンの間の通信にパイプラインが使用されます。これにより、同時計算が実現され、パフォーマンスが大幅に向上します。

関数通信における Golang パイプラインの改善と制限 関数通信における Golang パイプラインの改善と制限 May 04, 2024 am 10:36 AM

Go 言語のパイプラインは、ゴルーチン間の通信に使用される同時実行プリミティブです。 パイプラインを作成します。 make(chantype) を使用して、送信チャネルと受信チャネルを持つパイプライン タイプを作成します。データの送信: パイプで送信演算子を使用します (

See all articles