在Redis

时间:2017-07-31 08:15:37

标签: php mysql redis crud

我计划将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
  • 拯救MySQL的新体验,一旦成功,它将在Redis上推出相同的体验(在redis格式上)。
  • 获取/撤回Redis的所有记录而不是MySQL
  • 更新MySQL体验,一旦成功,它将更新Redis上的特定体验---> 我不知道如何在Redis上执行此操作而不在PHP上循环它,如果我有大量的记录,这不是个好主意:(

这是我在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。

任何建议或建议?谢谢你们。

1 个答案:

答案 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));

但如果您从列表中删除任何经验以保持地图同步,则需要格外小心。