redis数据库设计 - 确定正确的数据类型并创建二级索引

时间:2016-09-08 19:42:14

标签: rest redis node-redis

我有以下数据:

{
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

应返回内部扩展值2222.

但我还需要能够支持这样的查询:

http://myapp/phonenumber/2222@abc.com

这应该给我一个值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\"}"

然后我创建了一个引用同一个电话对象的辅助索引:

127.0.0.1:6379> hset phone:lookup:e164 1231231234 1

现在,当我查询时,我必须进行两次查找才能找到我想要的ifnormation。因此,如果用户将完整的电话号码传给我,我必须执行以下查询:

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数据的最佳方法吗? 我只是在读哈希。但我不熟悉知道要采取哪种方式。 另外,鉴于上述数据,我如何要求查看所有电话号码及其数据?

2 个答案:

答案 0 :(得分:1)

在您的GET http://myapp/phonenumber/2222@abc.com中,您是否正在寻找给定URI的PSTN号码(不仅仅是针对给定的分机号码)?

如果是这种情况(我只是根据您的密钥'e164'来猜测),那么查找将是URI为sip:2222@abc.com的电话号码,并且您的应用程序应该返回电话号码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。

答案 1 :(得分:0)

我会使用HMSET来存储整个记录,然后使用简单的键/值来查询数据。例如:

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

考虑获得extlocation的数字:

HMGET 123-123-1234 ext 
HMGET 123-123-1234 location