在Redis的键的工作(Work with keys in redis)

2019-09-16 08:34发布

我在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)

Answer 1:

为了避免值的重复,您可以使用这样简单的键/值对:

  • master_id:值

  • slave_id:master_id

这样做,你必须查询两次获得/删除/由slave_id修改的值服务器的缺点。 (您第一次查询的slave_id,服务器与master_id如果有的话,然后您查询master_id做的东西有关联的值响应)。 这会不会是一个问题,因为一旦LUA脚本到达,虽然。



Answer 2:

在这个例子中,如果主键只是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实际上是主键,那么它可以被简化,因为没有必要引入额外的键来标识值。



文章来源: Work with keys in redis