redis一对多的实现???求解
PHP中文网
PHP中文网 2017-04-22 09:00:29
0
4
1657

最近在学习使用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数据设计???

PHP中文网
PHP中文网

认证0级讲师

全員に返信(4)
PHPzhong

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); を通じてこのリストを取得できます。

いいねを押す +0
洪涛

ハッシュのみ使用できます。

いいねを押す +0
Ty80

ユーザーメインテーブルはハッシュを使用します。
写真テーブルもハッシュを使用して処理されますが、フィールドは写真の ID を使用します

いいねを押す +0
Peter_Zhu

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート