最近在学习使用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数据设计???
PHPz2017-04-22 09:02:29
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); を通じてこのリストを取得できます。
天蓬老师2017-04-22 09:02:29
HSET ユーザー 1「{名前: 'jack'、年齢: 5、写真: [1, 2]}」
HSET ユーザー 2「{名前: 'rose'、年齢: 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 ユーザー_写真 1 1
ZADD ユーザー_写真 1 2
ZADD ユーザー_写真 2 4
ユーザー 2 の写真をクエリします (ZRANGEBYSCORE キー最小最大 [WITHSCORES])
ZRANGEBYSCORE ユーザー_写真 2 2
ユーザー 1 と 2 の写真をクエリします
ZRANGEBYSCORE User_Pics 1 2 WITHSCORE
写真 4 のユーザー (ZSCORE キーメンバー) をクエリします
ZSCORE ユーザー_写真 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 ユーザー_写真 2 2
ユーザー 1 と 2 の写真をクエリします
ZRANGEBYSCORE User_Pics 1 2 WITHSCORE
ZADD 写真_ユーザー 1 "1-1"
ZADD 写真_ユーザー 1 "2-1"
ZADD 写真_ユーザー 2 "1-2"
ZADD 写真_ユーザー 2 "2-2"
写真1 1のユーザーに問い合わせます
ZRANGEBYSCORE Pics_User 1 1
写真1 1と2のユーザーに問い合わせます
ZRANGEBYSCORE Pics_User 1 2 WITHSCORE