ホームページ データベース mysql チュートリアル REDIS与MYSQL实现标签的对比_MySQL

REDIS与MYSQL实现标签的对比_MySQL

May 27, 2016 pm 01:46 PM
ラベル

这里来演示下REDIS和MYSQL之间的数据转换问题,REDIS 是典型的KEY -VALUE型NOSQL数据库,并且提供了额外丰富的数据类型。这里简单列举了标签类型的应用问题。

比如在MySQL里面,对内容的标签有以下简单的几张表,我这里只列出来拆分过后的表结构

第一,MySQL部分,

内容表:
CREATE TABLE `content` (
  `id` int(10) unsigned NOT NULL, -- 内容ID,唯一。
  `name` varchar(60) DEFAULT NULL, -- 内容的名字
  `created_timestamp` timestamp NULL DEFAULT NULL, -- 内容的加入时间
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


标签表:
CREATE TABLE `tag` (
  `tag_name` varchar(60) NOT NULL, -- 标签名字,唯一
  `visit_count` int(10) unsigned NOT NULL DEFAULT '0', -- 标签的访问次数
  PRIMARY KEY (`tag_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1


内容与标签的关系,多对多。


CREATE TABLE `content_tag_relation` (
  `content_id` int(10) unsigned NOT NULL, -- 内容ID
  `tag_name` varchar(60) NOT NULL -- 标签名字
) ENGINE=InnoDB DEFAULT CHARSET=latin1
ログイン後にコピー


假设我们有以下的需求:
1. 得到标签对应的文章名字,
SELECT a.name FROM content AS a,content_tag_relation AS b
WHERE a.id = b.content_id AND b.tag_name = 'mysql'
ログイン後にコピー


2. 按照访问量显示前三的标签,

SELECT tag_name FROM tag WHERE 1 ORDER BY visit_count DESC LIMIT 3;
ログイン後にコピー

下来我们在REDIS里面存储这部分数据。
第二,redis部分,
1. a,内容,我们用STRING类型来做,值用JSON来存储,

	t_girl:6379> set string:content_id:4  '{"name":"test48601","created_timestamp":"2012-01-01 05:41:01"}'
	OK
	t_girl:6379> get string:content_id:4
	"{\"name\":\"test48601\",\"created_timestamp\":\"2012-01-01 05:41:01\"}"
ログイン後にコピー

但是如果想得到内容对应的名字和创建时间,REDIS方面获取困难,就得交给程序来做了。


b,或者也可以用HASH类型来存储,
	t_girl:6379> hset 'hset:content_id:4' name 'test48601'
	(integer) 1
	t_girl:6379> hset 'hset:content_id:4' created_timestamp '2012-01-01 05:41:01'
	(integer) 1
ログイン後にコピー


那这时想获取对应的名字以及时间非常容易
	t_girl:6379> hget hset:content_id:4 name
	"test48601"
	t_girl:6379> hget hset:content_id:4 created_timestamp
	"2012-01-01 05:41:01"
	t_girl:6379> 
ログイン後にコピー


2. 标签,我们用有序集合来做,这么做的好处是可以用REDIS对应的有序来做访问量的排序。
	t_girl:6379> zadd zset:tag 680 database 469 db2
	(integer) 2
ログイン後にコピー


比如我们想要得到访问前三的标签名字?
	t_girl:6379> zrevrangebyscore zset:tag +inf 0 limit 0 3
	1) "mongodb"
	2) "sql"
	3) "postgresql"
ログイン後にコピー


3. 标签与内容的关系,我们用集合来做,
	t_girl:6379> sadd set:content_id:4 role mongodb role database 
	(integer) 3
ログイン後にコピー

那么也很容易得到指定内容对应的标签
	t_girl:6379> smembers set:content_id:4
	1) "database"
	2) "role"
	3) "mongodb"
ログイン後にコピー


4. a, 如果用上面的设计我们实现稍微复杂些的需求:比如得到标签对应的文章名字。这样的需求貌似没有可以直接拿来用的方法,比如下面我写的一段PYTHON代码来获取:
    import redis
	    content_id_keys = r.keys('set*')
	    content_id_keys_len = len(content_id_keys)
	
	    i = 0
	    j = 0
	    content_name_list = []
	    while i < content_id_keys_len:
	        if r.sismember(content_id_keys[i],&#39;mysql&#39;) == 1:
	            content_name_list.append(eval(r.get(content_id_keys[i].replace(&#39;set&#39;,&#39;string&#39;)))[&#39;name&#39;])
	            print(&#39;Content name is :&#39; + content_name_list[j])
	            j += 1
	        i += 1  
ログイン後にコピー


b.那其实我们可以在REDIS里面做一份冗余的集合来存储,这样就可以直接把信息拿出来。

	t_girl:6379> sadd tag:mysql test123 test133 test144 test155
	(integer) 4
	t_girl:6379> smembers tag:mysql
	1) "test133"
	2) "test155"
	3) "test123"
	4) "test144"
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

Chrome と Edge のすべてのタブでテキストを検索する方法 Chrome と Edge のすべてのタブでテキストを検索する方法 Feb 19, 2024 am 11:30 AM

このチュートリアルでは、Windows の Chrome または Edge で開いているすべてのタブで特定のテキストまたは語句を検索する方法を説明します。 Chrome で開いているすべてのタブでテキスト検索を行う方法はありますか?はい。Chrome で無料の外部 Web 拡張機能を使用すると、タブを手動で切り替えることなく、開いているすべてのタブでテキスト検索を実行できます。 TabSearch や Ctrl-FPlus などの一部の拡張機能を使用すると、これを簡単に実現できます。 Google Chrome のすべてのタブでテキストを検索するにはどうすればよいですか? Ctrl-FPlus は、ユーザーがブラウザ ウィンドウのすべてのタブで特定の単語、語句、またはテキストを簡単に検索できるようにする無料の拡張機能です。この展開は

Douyin にタグを追加してトラフィックを集めるにはどうすればよいですか?プラットフォーム上のどのタグがトラフィックを引き付けるのが最も簡単ですか? Douyin にタグを追加してトラフィックを集めるにはどうすればよいですか?プラットフォーム上のどのタグがトラフィックを引き付けるのが最も簡単ですか? Mar 22, 2024 am 10:28 AM

人気のショートビデオソーシャルプラットフォームとして、Douyin は巨大なユーザーベースを持っています。 Douyin クリエイターにとって、タグを使用してトラフィックを集めるのは、コンテンツの露出を増やして注目を集める効果的な方法です。では、Douyin はトラフィックを集めるためにタグをどのように使用しているのでしょうか?この記事では、この質問に詳しく答え、関連するテクニックを紹介します。 1. Douyin にタグを追加してトラフィックを集めるにはどうすればよいですか?動画を投稿するときは、必ずコンテンツに関連したタグを選択してください。ユーザーがタグからビデオを見つけやすくするために、これらのタグはビデオのトピックとキーワードをカバーする必要があります。人気のハッシュタグを活用することは、動画の露出を増やす効果的な方法です。現在人気のタグやトレンドを調査し、動画の説明やタグに組み込んでください。これらの人気のあるタグは通常、視認性が高く、より多くの視聴者の注目を集めることができます。 3. ラベル

TikTokレーベルの後ろにある時計は何ですか? Douyinアカウントにタグを付けるにはどうすればよいですか? TikTokレーベルの後ろにある時計は何ですか? Douyinアカウントにタグを付けるにはどうすればよいですか? Mar 24, 2024 pm 03:46 PM

Douyin の作品を閲覧していると、タグの後ろに時計のアイコンが表示されることがよくあります。それで、この時計は一体何なのでしょうか?この記事では、「Douyin ラベルの背後にある時計とは何か」についての議論に焦点を当て、Douyin を使用する際に役立つ参考になれば幸いです。 1. Douyin ラベルの後ろにある時計は何ですか? Douyin はいくつかのホットなトピック チャレンジを開始します。ユーザーが参加すると、タグの後に時計アイコンが表示されます。これは、その作品がトピック チャレンジに参加していることを意味し、チャレンジの残り時間が表示されます。休日や特別なイベントなど、時間に敏感な一部のコンテンツの場合、Douyin はラベルの後に時計アイコンを添付して、コンテンツの有効期間をユーザーに思い出させます。 3. 人気のタグ: タグが人気になると、Douyin はタグの後に時計アイコンを追加して、そのタグが人気であることを示します。

DingTalkアプリで外部連絡先タグを削除する方法 DingTalkアプリで外部連絡先タグを削除する方法 Feb 24, 2024 am 08:20 AM

DingTalk アプリで外部連絡先タグを削除するにはどうすればよいですか? DingTalk には外部連絡先タグを削除する機能がありますが、ほとんどの友人は DingTalk で外部連絡先タグを削除する方法を知りません。次に、エディターがユーザーに提供する DingTalk ガイドです。グラフィカル チュートリアルです。 Ding アプリで外部連絡先タグを削除する方法について説明しています。興味のあるユーザーはぜひご覧ください。 DingTalk アプリで外部連絡先タグを削除する方法 1. まず DingTalk アプリを開き、メイン ページで以下に示すように [管理] 機能をクリックします; 2. 次に、エンタープライズ管理インターフェイスに入り、[外部連絡先] を見つけます; 3. 次に、外部連絡先設定機能ページで、[ラベル管理] サービスを選択します; 4. 次に、メイン連絡先ラベル ページで、削除するラベル グループの種類を選択します; 5. 最後に、赤いラベル グループをクリックします

html5タグのヘッドとヘッダーの違いは何ですか? html5タグのヘッドとヘッダーの違いは何ですか? Jan 17, 2022 am 11:10 AM

相違点: 1. head タグは、すべての head 要素のコンテナであるドキュメントの先頭を定義するために使用され、header タグはドキュメントのヘッダー (紹介情報) を定義するために使用されます; 2. すべてのブラウザは、 head タグと古いバージョンのブラウザ どのブラウザも header タグをサポートしていません。header タグをサポートするには、IE9 以降などのブラウザが必要です。

HTML の video 要素を詳しく見る HTML の video 要素を詳しく見る Feb 24, 2024 pm 08:18 PM

HTMLのvideoタグの詳しい説明 HTML5のvideoタグは、Webページ上で動画を再生するために使用されるタグです。 MP4、WebM、Ogg などのさまざまな形式を使用してビデオをレンダリングできます。この記事では、videoタグの使い方を詳しく紹介し、具体的なコード例を示します。基本構造 video タグの基本構造は次のとおりです。

HTML と CSS を使用して固定ナビゲーション メニューを含むレイアウトを実装する方法 HTML と CSS を使用して固定ナビゲーション メニューを含むレイアウトを実装する方法 Oct 26, 2023 am 11:02 AM

HTML と CSS を使用して固定ナビゲーション メニューを含むレイアウトを実装する方法 最新の Web デザインでは、固定ナビゲーション メニューは一般的なレイアウトの 1 つです。ナビゲーション メニューを常にページの上部または横に配置できるため、ユーザーは Web コンテンツを便利に閲覧できます。この記事では、HTML と CSS を使用して固定ナビゲーション メニューのレイアウトを実装する方法を紹介し、具体的なコード例を示します。まず、Web ページのコンテンツとナビゲーション メニューを表示する HTML 構造を作成する必要があります。これが簡単な例です

Vue を使用してラベル付き入力ボックスを実装するにはどうすればよいですか? Vue を使用してラベル付き入力ボックスを実装するにはどうすればよいですか? Jun 25, 2023 am 11:54 AM

Web アプリケーションの開発に伴い、ラベル付き入力ボックスの人気が高まっています。この種の入力ボックスにより、ユーザーはより便利にデータを入力できるようになり、入力されたデータの管理や検索も容易になります。 Vue は、ラベル付き入力ボックスを迅速に実装するのに役立つ非常に強力な JavaScript フレームワークです。この記事では、Vue を使用してラベル付き入力ボックスを実装する方法を紹介します。ステップ 1: Vue インスタンスを作成する まず、ページ上に Vue インスタンスを作成する必要があります。コードは次のとおりです: &l

See all articles