0
我打算使用Redis作为我的PHP API的第二类数据库(Predis for PHP & Redis连接),我的主数据库是MySQL。我对它很陌生,我想知道我是否正确,或者我完全错误。正确的方法来更新Redis中的LIST/SET上的特定记录
我将使用Redis进行所有“SELECT”或Retrieval查询,而不是从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的格式)。
- 获取/ Retreive从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的“服务员”体验。
任何暗示或建议?多谢你们。
很酷。谢谢@Alex Blex。这是一个好方法。 $ redis-> lset('uid:'。$ userId。':experience',$ listId - 1,json_encode($ newUserExperience));我把“-1”得到正确的索引。对于删除,你认为它更好地做软删除?或者你有关于如何删除列表中的特定记录的建议。 – jamcoder
谢谢,更新了答案。是的,软删除是最简单的方法。如果你有很多,你可能需要在删除经验的某个阈值后重新加载。 –
明白了。我会做软删除的方法。谢谢@Alex Blex。 – jamcoder