redis应用之——标签
mysql:
create table book (
bookid int,
title char(20)
)engine myisam charset utf8;
insert into book values
(5 , 'PHP圣经'),
(6 , 'ruby实战'),
(7 , 'mysql运维')
(8, 'ruby服务端编程');
create table tags (
tid int,
bookid int,
content char(20)
)engine myisam charset utf8;
insert into tags values
(10 , 5 , 'PHP'),
(11 , 5 , 'WEB'),
(12 , 6 , 'WEB'),
(13 , 6 , 'ruby'),
(14 , 7 , 'database'),
(15 , 8 , 'ruby'),
(16 , 8 , 'server');
# 既有web标签,又有PHP,同时还标签的书,要用连接查询
select * from tags inner join tags as t on tags.bookid=t.bookid
where tags.content='PHP' and t.content='WEB';
换成key-value存储
用kv 来存储
set book:5:title 'PHP圣经'
set book:6:title 'ruby实战'
set book:7:title 'mysql运难'
set book:8:title 'ruby server'
sadd tag:PHP 5
sadd tag:WEB 5 6
sadd tag:database 7
sadd tag:ruby 6 8
sadd tag:SERVER 8
查: 既有PHP,又有WEB的书
Sinter tag:PHP tag:WEB #查集合的交集
查: 有PHP或有WEB标签的书
Sunin tag:PHP tag:WEB
查:含有ruby,不含WEB标签的书
Sdiff tag:ruby tag:WEB #求差集
假设需要需要查询既属于,又属于,又属于的情况,以mysql为例,用到join(如果取交集的标签够多,join的量会够多),语句会很长,很耗资源。而redis能轻松解决这个问题:
有若干本书,分别属于若干个标签(类型):
'php圣经','java圣经','C++圣经','asp圣经','php从入门到放弃','go圣经','linux内核编程','python圣经'
属于php的:
'php圣经','php从入门到放弃'
属于web的:
'php圣经','asp圣经','php从入门到放弃'
属于code的:
'php圣经','java圣经','C++圣经','asp圣经','php从入门到放弃','go圣经','python圣经'
属于system的:
'linux内核编程
接下来,字段设置:
先将书设置好:
set book:1:title 'php圣经'
set book:2:title 'java圣经'
set book:3:title 'C++圣经'
set book:4:title 'asp圣经'
set book:5:title 'php从入门到放弃'
set book:6:title 'go圣经'
set book:7:title 'linux内核编程'
set book:8:title 'python圣经'
将书签设置好:
sadd tag:php 1 5
sadd tag:web 1 4 5
sadd tag:code 1 2 3 4 5 6 8
sadd tag:system 7
用集合,取交集的方式迅速求出
既属于php标签又属于web标签的:
127.0.0.1:6379> sinter tag:php tag:web
1
5
既属于php标签又属于web标签又属于code标签的:
127.0.0.1:6379> sinter tag:php tag:web tag:code
1
5
获取1、5的书名:
127.0.0.1:6379> get book:1:title
php圣经
127.0.0.1:6379> get book:5:title
php从入门到放弃
注意:正常情况下redis命令窗口不显示中文,要显示中文要加上--raw参数
[lzw@localhost bin]$ redis-cli
127.0.0.1:6379> get book:1:title
"php\xe5\x9c\xa3\xe7\xbb\x8f"
127.0.0.1:6379>
[lzw@localhost bin]$ redis-cli --raw
127.0.0.1:6379> get book:1:title
php圣经