使用redis中的密钥
我是Redis和键值数据库中的新成员。你能否建议我在redis中正确实现这种关系方法?使用redis中的密钥
我有关系表中有两个关键,一个值:
-master_id; -slave_id; -value。
实施例:
master_id | slave_id |值
1 | 1 | val1
2 | 1 | val2
通常访问值由master_id字段完成,但有时需要通过slave_id字段进行选择(或删除)。因此,我们可以通过两个字段(master_id或slave_id)获取单个值。在redis中,据我了解,每个键都意味着一个值。 执行此操作的最佳方式是什么,不会重复价值? 注意:值字段必须是SET或列表类型。
在Redis的有:
1:1 VAL1 2:1 VAL2
我只能用全键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 scripting到达,这不会成为问题。
在这个例子中,我不明白主键只是master_id还是(master_id,slave_id)。我假设后者。
尝试将关系概念映射到键/值存储通常毫无意义。 Redis是一个数据结构服务器,因此您需要考虑数据结构和访问路径。你想:
- 存储值一次
- 能够从master_id字段访问值
- 能够从slave_id字段访问值
您需要:
- 数字键将识别值
- as每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命令以减少往返次数。 查看示例in this answer。
当然,如果master_id实际上是主键,那么它可以被简化,因为不需要引入额外的键来标识值。