最近在学习使用redis,在关系型的mysql下一个简单的一对多,很简单,如下
用户表user主表
id |
name |
age |
1 |
jack |
5 |
2 |
rose |
12 |
3 |
dad |
23 |
图片表pics从表
id |
uid |
img_url |
1 |
1 |
./1zxcz12ad.jpg |
2 |
1 |
./zsad12sad.jpg |
3 |
1 |
./12ea2222123xsw1212.jpg |
4 |
2 |
./12eaxx12sw1212.jpg |
换到基于key=》value的redis就晕了。。。请问如何设计出符合上表格的redis数据设计???
Redis는 처음부터 "관계"를 처리하도록 설계되지 않았으며 mysql은 관계형 데이터베이스입니다. 권장되지는 않지만 redis를 사용하여 구현할 수도 있습니다. 사용자 ID를 키로 사용하고 다음 이미지를 목록에 저장할 수 있습니다.
$redis->rPush("user_1", "./1zxcz12ad.jpg");
$redis->rPush("user_1", "./zsad12sad.jpg");
$redis->rPush("user_2", "./12eaxx12sw1212.jpg");
그런 다음 $redis->lRange('user_1', 0, -1);을 통해 이 목록을 얻을 수 있습니다.
해시만 사용할 수 있습니다.
사용자 메인 테이블은 해시를 사용합니다.
사진 테이블도 해시를 사용하지만 필드는 사진의 ID를 사용합니다
HSET 사용자 1 "{이름: 'jack', 나이: 5, 사진: [1, 2]}"
HSET 사용자 2 "{이름: '장미', 나이: 12, 사진: [4]}"
HSET 사진 1 "{img_url: './1zxcz12ad.jpg', 사용자: 1'}"
HSET 사진 2 "{img_url: './zsad12sad.jpg', 사용자: 1'}"
HSET 사진 4 "{img_url: './12eaxx12sw1212.jpg', 사용자: 2'}"
适用于1对多或者1对1(ZADD 핵심 점수 멤버):
ZADD User_Pics 1 1
ZADD User_Pics 1 2
ZADD User_Pics 2 4
查询사용자 2의 사진(ZRANGEBYSCORE 키 최소 최대 [WITHSCORES])
ZRANGEBYSCORE User_Pics 2 2
查询사용자 1과 2의 사진
ZRANGEBYSCORE User_Pics 1 2 WITHSCORES
查询pics 4의 사용자(ZSCORE 핵심 멤버)
ZSCORE User_Pics 4
HSET 사용자 1 "{이름: 'jack', 나이: 5, 사진: [1, 2]}"
HSET 사용자 2 "{이름: 'rose', 나이: 12, 사진: [1,2]}"
HSET 사진 1 "{img_url: './1zxcz12ad.jpg', 사용자: [1, 2]'}"
HSET 사진 2 "{img_url: './zsad12sad.jpg', 사용자: [1, 2]'}"
对于多对多(值为 "userID-PicsID" ):
ZADD User_Pics 1 "1-1"
ZADD User_Pics 1 "1-2"
ZADD User_Pics 2 "2-1"
ZADD User_Pics 2 "2-2"
查询사용자 2의 사진
ZRANGEBYSCORE User_Pics 2 2
查询사용자 1과 2의 사진
ZRANGEBYSCORE User_Pics 1 2 WITHSCORES
ZADD Pics_User 1 "1-1"
ZADD Pics_User 1 "2-1"
ZADD Pics_User 2 "1-2"
ZADD Pics_User 2 "2-2"
查询pics1 1명의 사용자
ZRANGEBYSCORE Pics_User 1 1
查询pics1 1과 2의 사용자
ZRANGEBYSCORE Pics_User 1 2 WITHSCORES