我有以下数据:
{
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数据的最佳方法吗? 我只是在读哈希。但我不熟悉知道要采取哪种方式。 另外,鉴于上述数据,我如何要求查看所有电话号码及其数据?
答案 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
考虑获得ext
或location
的数字:
HMGET 123-123-1234 ext
HMGET 123-123-1234 location