在Redis中正确建模以编写单个实体但查询多个

时间:2015-12-30 15:30:47

标签: redis

我正在尝试将Sql DB上的数据转换为Redis。为了获得更高的吞吐量,因为它的吞吐量非常高。我知道持久性,存储成本等方面的缺点......

所以,我有一个名为“Users”的表,列数很少。我们假设:ID,姓名,电话,性别

大约90%的请求都是写入的。更新单行。 大约10%的请求是读取。在每个请求中获得20行。

我正试图绕过正确的模型,以便最大限度地利用它。

如果只有更新 - 我会使用哈希。 但由于10%的读数,我担心它不会有效。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

实际上,真正的问题是你是否需要支持部分更新。

假设不需要部分更新,您可以将记录存储在与密钥关联的blob中(即字符串数据类型)。所有写入操作都可以在一次往返中完成,因为记录总是一次写入。使用MGET命令也可以在一个rountrip中完成几个读操作。

现在,假设需要部分更新,您可以将记录存储在与密钥关联的字典中(即散列数据类型)。所有写操作都可以在一次往返中完成(即使它们是部分的)。如果HGETALL命令为pipelined,则可以在一次往返中完成多个读操作。

对几个HGETALL命令进行流水线操作比使用MGET要多一点CPU消耗,但不是那么多。就延迟而言,它应该没有显着差异,除非你在Redis实例上每秒执行数十万个。