redis一对多的实现???求解

浏览:15日期:2022-08-30

问题描述

最近在学习使用redis,在关系型的mysql下一个简单的一对多,很简单,如下

用户表user主表

id name age1 jack 52 rose 123 dad 23

图片表pics从表

id uid img_url1 1 ./1zxcz12ad.jpg2 1 ./zsad12sad.jpg3 1 ./12ea2222123xsw1212.jpg4 2 ./12eaxx12sw1212.jpg

换到基于key=》value的redis就晕了。。。请问如何设计出符合上表格的redis数据设计???

问题解答

回答1:

redis设计之初就不是为了处理“关系”的,而mysql就是关系型数据库。虽然不建议,但是redis也可以实现。你可以用用户的id作健,把这些image存进一个list中:$redis->rPush('user_1', './1zxcz12ad.jpg');$redis->rPush('user_1', './zsad12sad.jpg');$redis->rPush('user_2', './12eaxx12sw1212.jpg');然后可以通过:$redis->lRange(’user_1’, 0, -1);取到这个list。

回答2:

只能用hash了。

回答3:

user主表用hash来做。pics从表同样用hash来做,只是field用pics的ID

回答4:

HSET User 1 '{name: ’jack’, age: 5, Pics: [1, 2]}'

HSET User 2 '{name: ’rose’, age: 12, Pics: [4]}'

HSET Pics 1 '{img_url: ’./1zxcz12ad.jpg’, User: 1’}'HSET Pics 2 '{img_url: ’./zsad12sad.jpg’, User: 1’}'HSET Pics 4 '{img_url: ’./12eaxx12sw1212.jpg’, User: 2’}'

适用于1对多或者1对1 (ZADD key score member):

ZADD User_Pics 1 1ZADD User_Pics 1 2ZADD User_Pics 2 4

查询user 2的pics (ZRANGEBYSCORE key min max [WITHSCORES])

ZRANGEBYSCORE User_Pics 2 2

查询user 1和2的pics

ZRANGEBYSCORE User_Pics 1 2 WITHSCORES

查询pics 4的user (ZSCORE key member)

ZSCORE User_Pics 4

HSET User 1 '{name: ’jack’, age: 5, Pics: [1, 2]}'

HSET User 2 '{name: ’rose’, age: 12, Pics: [1,2]}'

HSET Pics 1 '{img_url: ’./1zxcz12ad.jpg’, User: [1, 2]’}'

HSET Pics 2 '{img_url: ’./zsad12sad.jpg’, User: [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'

查询user 2的pics

ZRANGEBYSCORE User_Pics 2 2

查询user 1和2的pics

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的user

ZRANGEBYSCORE Pics_User 1 1

查询pics1 1和2的user

ZRANGEBYSCORE Pics_User 1 2 WITHSCORES

相关文章: