Redis中的嵌套查询

时间:2016-04-07 18:58:48

标签: caching redis

我是redis的新手。我必须使用redis实现mac地址表缓存。 缓存中的每个条目都将包含以下信息

(1)。 Mac地址 - 6个字节的数组

(2)。 vlan - 整数值

(3)。接口id - 整数值(如果需要,可以是字符串)。

Mac-address + Vlan的组合在缓存中是唯一的。所以这可能是关键?

我希望能够以多种方式查询我的缓存,例如:

(1)。给我所有有vlan == 20

的条目

(2)。获取所有具有vlan == 20,interface-id == 5000

的条目

在Redis中存储它的最佳方法是什么。任何帮助表示赞赏。 谢谢, 沫

2 个答案:

答案 0 :(得分:0)

假设只有这两个查询,请将数据保存在一个排序集中。

ZADD新MAC时,使用0分,并按以下方式构建您的成员(字符串):

ZADD MAC-address-table 0 <vlan>:<interface-id>:<MAC>

在上面,确保vlan和interface-id都是根据需要用0填充的恒定宽度。假设这些是32位无符号整数,这将是这样的:

ZADD MAC-address-table 0 00020:05000:XYZCBA

使用0作为分数将导致按字典顺序对排序集进行排序,因此您可以使用ZRANGEBYLEX。第一个查询是:

ZRANGEBYLEX MAC-address-table 00020: 00020:\xff

\xff是字符255,最后一个字符表示它是词法顺序中的最后一个字符)。同样,第二个查询:

ZRANGEBYLEX MAC-address-table 00020:05000 00020:05000\xff

答案 1 :(得分:0)

这正是我将评论置于上述问题的原因......你不能。或者更确切地说,您需要使用额外的排序集或称为redimension的其他技术 - 请参阅Redis.io上的二级索引文档页面