我是redis的新手。我必须使用redis实现一个mac地址表缓存。缓存中的每个条目都将包含以下信息
(1)。Mac地址-6字节数组
(2)。vlan -整数值
(3)。接口id -整数值(如果需要,可以改为字符串)。
Mac-address + Vlan的组合在整个缓存中是唯一的。所以这可能是关键?
我希望能够以多种方式查询我的缓存,例如:
(1)。获取所有具有vlan == 20的条目
(2)。获取vlan接口为20、== -id为== 5000的所有条目
在Redis中存储这个最好的方法是什么?任何帮助都是非常感谢的。谢谢,莫
发布于 2016-04-08 05:17:38
假设只有这两个查询,将数据放在一个排序集中。
当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发布于 2016-04-14 02:54:58
这就是为什么我对你上面的问题发表评论的原因。或者,您要么需要使用额外的排序集,要么需要使用另一种称为重新维度的技术-请参阅Redis.io上的二级索引文档页面
https://stackoverflow.com/questions/36484904
复制相似问题