REDIS与MYSQL实现标签的对比_MySQL
这里来演示下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],'mysql') == 1: content_name_list.append(eval(r.get(content_id_keys[i].replace('set','string')))['name']) print('Content name is :' + 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"

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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