首頁 資料庫 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 Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

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可以幫助您輕鬆實現這項功能。如何在GoogleChrome的所有選項卡中搜尋文字? Ctrl-FPlus是一個免費的擴展,它方便用戶在瀏覽器視窗的所有標籤中搜尋特定的單字、短語或文字。這個擴

抖音標籤後面的時鐘是什麼?怎麼給抖音帳號打標籤呢? 抖音標籤後面的時鐘是什麼?怎麼給抖音帳號打標籤呢? Mar 24, 2024 pm 03:46 PM

在瀏覽抖音作品時,我們常常可以看到標籤後面有時鐘圖示。那麼,這個時鐘到底是什麼呢?本文將圍繞著「抖音標籤後面的時鐘是什麼」展開討論,希望為您的抖音使用提供一些有益的參考。一、抖音標籤後面的時鐘是什麼?抖音會推出一些熱門話題挑戰,用戶參與時會在標籤後看到一個時鐘圖標,這代表作品正在參與話題挑戰,並顯示挑戰的剩餘時間。對於一些具有時效性的內容,如假日、特殊活動等,抖音會在標籤後面附上時鐘圖標,提醒使用者該內容的有效期限。 3.熱門標籤:當某個標籤變得熱門時,抖音會在標籤後面加上時鐘圖標,表示這個標籤正

抖音怎麼帶標籤引流?平台什麼標籤最容易引流? 抖音怎麼帶標籤引流?平台什麼標籤最容易引流? Mar 22, 2024 am 10:28 AM

抖音作為一款備受歡迎的短影片社群平台,擁有龐大的使用者群體。對於抖音創作者來說,標籤引流是一種有效提升內容曝光度和吸引關注的方法。那麼,抖音怎麼帶標籤引流呢?本文將為您詳細解答這個問題,並介紹相關技巧。一、抖音怎麼帶標籤引流?發布影片時,請確保選擇與內容相關的標籤。這些標籤應涵蓋影片的主題和關鍵字,以便讓用戶透過標籤更容易找到您的影片。利用流行標籤是增加影片曝光的有效方法。研究當前熱門標籤和趨勢,將其巧妙地融入影片描述和標籤中。這些熱門標籤通常具有更高的曝光度,能夠吸引更多觀眾的注意。 3.標籤

深入了解HTML中的video元素 深入了解HTML中的video元素 Feb 24, 2024 pm 08:18 PM

HTML中video影片標籤詳解HTML5中的video標籤是一種用於在網頁上播放影片的標籤。它可以使用不同的格式來呈現視頻,例如MP4、WebM、Ogg等等。在本篇文章中,我們將詳細介紹video標籤的使用方法,並提供具體的程式碼範例。基本結構下面是video標籤的基本結構:

html5標籤head和header有什麼差別 html5標籤head和header有什麼差別 Jan 17, 2022 am 11:10 AM

區別:1、head標籤用於定義文檔頭部,它是所有頭部元素的容器,而header標籤用於定義文檔的頁眉(介紹資訊);2、瀏覽器都支援head標籤,而舊版本瀏覽器皆不支援header標籤,需要IE9+以上瀏覽器才能支援header標籤。

釘釘app外部聯絡人標籤怎麼刪除 釘釘app外部聯絡人標籤怎麼刪除 Feb 24, 2024 am 08:20 AM

釘釘app外部聯絡人標籤怎麼刪除?釘釘中是可以刪除外部聯絡人標籤的功能,但是多數小夥伴不知道釘釘外部聯絡人標籤如何的刪除,接下來就是小編為用戶帶來的釘釘app外部聯絡人標籤刪除方法圖文教學,有興趣的用戶快來一起看看吧!釘釘app外部聯絡人標籤怎麼刪除1、先開啟釘釘APP,主頁中點選如下圖所示的【管理】功能;2、然後進入到企業管理的介面,找到其中的【外部聯絡人】; 3.接著在外部聯絡人設定功能頁,選擇【標籤管理】服務;4、之後在聯絡人標籤主頁,選擇你需要刪除的標籤組類型;5、最後點選標籤組紅色

如何使用HTML和CSS實作一個具有固定導航選單的佈局 如何使用HTML和CSS實作一個具有固定導航選單的佈局 Oct 26, 2023 am 11:02 AM

如何使用HTML和CSS實現一個具有固定導航選單的佈局在現代網頁設計中,固定導航選單是常見的佈局之一。它可以使導航選單始終保持在頁面頂部或側邊,使用戶可以輕鬆瀏覽網頁內容。本文將介紹如何使用HTML和CSS實作一個具有固定導航選單的佈局,並提供具體的程式碼範例。首先,需要建立一個HTML結構來呈現網頁的內容和導覽選單。以下是一個簡單的範例

如何使用 Vue 實現標籤的輸入框? 如何使用 Vue 實現標籤的輸入框? Jun 25, 2023 am 11:54 AM

隨著Web應用的發展,標籤的輸入框越來越受歡迎。這種輸入框可以讓使用者更方便輸入數據,同時也方便使用者對已輸入的數據進行管理和搜尋。 Vue是一款非常強大的JavaScript框架,它可以幫助我們快速實現帶有標籤的輸入框。本文將介紹如何使用Vue實作標籤的輸入框。第一步:建立Vue實例首先,我們需要在頁面上建立Vue實例,程式碼如下:&l

See all articles