[오리지널] REDIS와 MYSQL 구현 라벨의 대비
예를 들어 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;
내려와.
둘째, 리디스 부분,
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 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redis 해시에 대한 완벽한 가이드변경 가능하므로 필요에 따라 쉽게 변경하고 업데이트할 수 있습니다. Redis 해시는 구조가 평평하므로 JSON에서와 같이 여러 수준을 가질 수 없습니다. redis 해시의 명명 규칙은 hash:key 로 입력되므로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.