我在Redis的和键值数据库中的新。 你能告诉我关于正确认识在Redis的这种关系的做法。
我有两个关键,一个价值关系表:
-master_id; -slave_id; -值。
例:
master_id | slave_id | 值
1 | 1 | VAL1
2 | 1 | VAL2
通常获得的值是通过master_id场进行,但有时需要进行选择(或删除)通过slave_id场。 因此,我们可以得到由两个字段(master_id或slave_id)的单个值。 在Redis的,据我了解每一个关键的意思是一个值。 什么执行此,没有重复值的最佳方法? 注:值字段必须是一组或列表类型。
在Redis的,我们有:
1:1 VAL1 2:1缬氨酸2
我只能通过自己获得价值全键1:1或2:1。 我不能让这样的事情DEL *:1(其中第二部分等于1全部删除键)或GET 1:*(获得所有按键,其中按键的第一部分等于1)
为了避免值的重复,您可以使用这样简单的键/值对:
master_id:值
slave_id:master_id
这样做,你必须查询两次获得/删除/由slave_id修改的值服务器的缺点。 (您第一次查询的slave_id,服务器与master_id如果有的话,然后您查询master_id做的东西有关联的值响应)。 这会不会是一个问题,因为一旦LUA脚本到达,虽然。
在这个例子中,如果主键只是master_id或(master_id,slave_id)我不明白。 我认为是后者。
它通常是没有意义的尝试映射关系概念,以键/值存储。 Redis是一个数据结构服务器,那么你需要考虑在数据结构和访问路径的任期。 你想要:
- 存储值一次
- 能够从master_id字段访问值
- 能够从slave_id字段访问值
你需要:
- 数字键,将标识值
- 每master_id一组索引对应的值
- 每slave_id一组索引对应的值
例:
SET value:1001 val1
SET value:1002 val2
SADD master:1 1001
SADD master:2 1002
SADD slave:1 1001 1002
要检索对应于给定的主ID值:
SMEMBERS master:id
MGET <result of the previous command with a value: prefix>
要检索与给定的子机ID值:
SMEMBERS slave:id
MGET <result of the previous command with a value: prefix>
检索对应于主ID1和ID2从属的值:
SINTER master:id1 slave:id2
MGET <result of the previous command with a value: prefix>
它可以进一步优化通过使用SORT命令以减少往返次数。 看一个例子在这个答案 。
当然,如果master_id实际上是主键,那么它可以被简化,因为没有必要引入额外的键来标识值。