最近在学习使用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「{名前: '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