最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【原創(chuàng)】REDIS與MYSQL實(shí)現(xiàn)標(biāo)簽的對(duì)比

標(biāo)簽:
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"

©著作权归作者所有:来自51CTO博客作者david_yeung的原创作品,如需转载,请注明出处,否则将追究法律责任


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消