Redis 数据库设计 - 确定适当的数据类型并创建二级索引
redis database design - determining the proper data type and creating secondary indexes
我有如下数据:
{
location: 'zimbabwe',
phone_num: 123-123-1234,
ext: 2222
}
或
{
location: 'puerto rico',
phone_num: 222-222-2222,
ext: 8888
}
我的最终用户需要能够查询 REST API 并发送如下内容:
http://myapp/internalext/123-123-1234
那应该 return 内部扩展值为 2222。
但我还需要能够支持这样的查询:
http://myapp/phonenumber/2222@abc.com
对我来说 return 的值应该是 123-123-1234
为了能够支持这样的查询,我想知道在 Redis 中创建数据的最佳方法是什么。我必须创建一个 node-redis web api.
到目前为止,我已尝试创建这样的数据:
127.0.0.1:6379> set phone:1
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}"
然后我创建了一个引用相同 phone 对象的二级索引:
127.0.0.1:6379> hset phone:lookup:e164 1231231234 1
现在,当我查询时,我必须进行两次查找才能找到我想要的 ifnormation。因此,如果用户将完整的 phone 号码传递给我,我必须执行以下查询:
1. First lookup using the e164 as key:
127.0.0.1:6379> hget phone:lookup:e164 1231231234
"1"
2. now you know that it's the first key in the "phone" set(?? i dunno if this is the terminology)
127.0.0.1:6379> get phone:1
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}"
127.0.0.1:6379>
问题
这是为这些类型的 GET 请求组织/创建我的 redis 数据的最佳方式吗?
我只是在阅读有关哈希的内容。但我还不够熟悉,不知道该走哪条路。
另外,鉴于上述数据,我将如何请求查看所有 phone 号码及其数据?
我会使用 HMSET 来存储整个记录,然后使用简单的 key/value 来查询数据。例如:
HMSET 123-123-1234 location "zimbabwe" phone_num "123-123-1234" ext "2222"
HMSET 222-222-2222 location "puerto rico" phone_num "222-222-2222" ext "8888"
SET ext:2222 123-123-1234
SET ext:8888 222-222-2222
要获得 123-123-1234
,您使用:
GET ext:2222
给定数字得到 ext
或 location
:
HMGET 123-123-1234 ext
HMGET 123-123-1234 location
可能是您在 GET http://myapp/phonenumber/2222@abc.com
中寻找给定 URI 的 PSTN 号码(不仅仅是给定分机)?
如果是这种情况(我只是根据您的名为 'e164' 的密钥进行猜测),查找将针对 URI 为 sip:2222@abc.com
的 phone 号码和您的应用程序预计 return phone 号码 123-123-1234
。换句话说,公司 ABC 的 DID 是什么,所以呼叫可以通过 PSTN 完成,而不是通过 IP...
> get phone:1
"{
\"id\":1,
\"locid\":1,
\"loc_name\":\"zimbabwe\",
\"iso3166\":\"ZW\",
\"loc_idd\":\"263\",
\"extension\":\"2222\",
\"e164\":\"4.3.2.1.3.2.1.3.2.1.3.6.2.e164.arpa.\",
\"uri":\"sip:2222@abc.zw\",
\"pstn\":\"+2631231231234\",
\"ui_disp_long\":\"+263-123-123-1234\",
\"ui_disp_short\":\"123-123-1234\"
}"
>
就您的REST/redis问题而言,我同意@noun。
我有如下数据:
{
location: 'zimbabwe',
phone_num: 123-123-1234,
ext: 2222
}
或
{
location: 'puerto rico',
phone_num: 222-222-2222,
ext: 8888
}
我的最终用户需要能够查询 REST API 并发送如下内容:
http://myapp/internalext/123-123-1234
那应该 return 内部扩展值为 2222。
但我还需要能够支持这样的查询:
http://myapp/phonenumber/2222@abc.com
对我来说 return 的值应该是 123-123-1234
为了能够支持这样的查询,我想知道在 Redis 中创建数据的最佳方法是什么。我必须创建一个 node-redis web api.
到目前为止,我已尝试创建这样的数据:
127.0.0.1:6379> set phone:1
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}"
然后我创建了一个引用相同 phone 对象的二级索引:
127.0.0.1:6379> hset phone:lookup:e164 1231231234 1
现在,当我查询时,我必须进行两次查找才能找到我想要的 ifnormation。因此,如果用户将完整的 phone 号码传递给我,我必须执行以下查询:
1. First lookup using the e164 as key:
127.0.0.1:6379> hget phone:lookup:e164 1231231234
"1"
2. now you know that it's the first key in the "phone" set(?? i dunno if this is the terminology)
127.0.0.1:6379> get phone:1
"{\"id\":1, \"locid\":1, \"loc_name\":\"zimbabwe\", \"extension\":\"2222\", \"e164\":\"1231231234\"}"
127.0.0.1:6379>
问题
这是为这些类型的 GET 请求组织/创建我的 redis 数据的最佳方式吗? 我只是在阅读有关哈希的内容。但我还不够熟悉,不知道该走哪条路。 另外,鉴于上述数据,我将如何请求查看所有 phone 号码及其数据?
我会使用 HMSET 来存储整个记录,然后使用简单的 key/value 来查询数据。例如:
HMSET 123-123-1234 location "zimbabwe" phone_num "123-123-1234" ext "2222"
HMSET 222-222-2222 location "puerto rico" phone_num "222-222-2222" ext "8888"
SET ext:2222 123-123-1234
SET ext:8888 222-222-2222
要获得 123-123-1234
,您使用:
GET ext:2222
给定数字得到 ext
或 location
:
HMGET 123-123-1234 ext
HMGET 123-123-1234 location
可能是您在 GET http://myapp/phonenumber/2222@abc.com
中寻找给定 URI 的 PSTN 号码(不仅仅是给定分机)?
如果是这种情况(我只是根据您的名为 'e164' 的密钥进行猜测),查找将针对 URI 为 sip:2222@abc.com
的 phone 号码和您的应用程序预计 return phone 号码 123-123-1234
。换句话说,公司 ABC 的 DID 是什么,所以呼叫可以通过 PSTN 完成,而不是通过 IP...
> get phone:1
"{
\"id\":1,
\"locid\":1,
\"loc_name\":\"zimbabwe\",
\"iso3166\":\"ZW\",
\"loc_idd\":\"263\",
\"extension\":\"2222\",
\"e164\":\"4.3.2.1.3.2.1.3.2.1.3.6.2.e164.arpa.\",
\"uri":\"sip:2222@abc.zw\",
\"pstn\":\"+2631231231234\",
\"ui_disp_long\":\"+263-123-123-1234\",
\"ui_disp_short\":\"123-123-1234\"
}"
>
就您的REST/redis问题而言,我同意@noun。