我计划将Redis用作我的PHP API的二级数据库(Predis for PHP& Redis连接),我的主数据库是MySQL。我是新手,我想知道我是走在正确的道路上还是我做错了。
我将全部使用Redis" SELECT"或者检索查询而不是从MySQL获取。这是样本流程。
我的用户在其他桌面上有多条记录(1:很多)。 TableA包含所有用户,TableB包含所有用户的所有经验记录。
**TableA**
UserID - 1234
UserID - 4567
UserID - 7890
-------------------------------------------------------
**TableB**
ExperienceID - 1 | UserID - 1234 | Experience - Waiter
ExperienceID - 2 | UserID - 1234 | Experience - Chef
ExperienceID - 3 | UserID - 4567 | Experience - Developer
ExperienceID - 4 | UserID - 4567 | Experience - Technician
ExperienceID - 5 | UserID - 4567 | Experience - Support
ExperienceID - 6 | UserID - 7890 | Experience - Engineer
ExperienceID - 7 | UserID - 7890 | Experience - Engineer
ExperienceID - 8 | UserID - 7890 | Experience - Draftsman
这是我在Redis中的布局。
uid:1234:experience
uid:4567:experience
uid:7890:experience
记录体验命名空间内部
我使用SADD和json编码数据来设置
$userExperience1 = array(
'id' => 1,
'user_id' => 1234,
'experience' => 'Waiter'
);
$userExperience2 = array(
'id' => 2,
'user_id' => 1234,
'experience' => 'Chef'
);
$redis->sadd('uid:' . $userId . ':experience', json_encode($userExperience1));
$redis->sadd('uid:' . $userId . ':experience', json_encode($userExperience2));
我也尝试过使用LIST
$redis->rpush('uid:' . $userId . ':experience', json_encode($userExperience1));
$redis->rpush('uid:' . $userId . ':experience', json_encode($userExperience2));
但是我不知道在redis上更新特定记录的正确方法,就像我只想更新"服务员"用户体验1234。
任何建议或建议?谢谢你们。
答案 0 :(得分:1)
使用套装你不会有其他选择,但会在应用程序级别迭代该套装。
使用列表可以处理单个对象,您只需要在列表中映射项ID以体验id。像这样:
$listId = $redis->rpush('uid:' . $userId . ':experience', json_encode($userExperience1));
$redis->set('eid:' . $userExperience1['id'] . ':listId', $listId);
所以更新非常简单:
$listId = $redis->get('eid:' . $newUserExperience['id'] . ':listId', $listId);
$redis->lset('uid:' . $userId . ':experience', $listId - 1, json_encode($newUserExperience));
但如果您从列表中删除任何经验以保持地图同步,则需要格外小心。