5

我想知道在 Redis 中存储 IP(不是很多(<50))以及一些元数据(添加时间,注意)的最佳方式是什么。我需要能够快速确定某个 IP 是否在该列表中,并能够检索所有存储的 IP。

我有一些想法,但它们对我来说似乎并不优雅/高效:

  • 使用列表存储 IP,其中每个条目都是数组(ip、note、timestamp)。这将使检索所有 IP 变得简单,但需要循环遍历所有 IP,以确定给定 IP 是否在列表中。因此,这对检索所有 IP 是很好的,但对于检查一个 IP 的存在不是很好。
  • 使用哈希表存储 IP,其中 IP 是键的一部分,元数据是哈希中的字段。这将允许我检查一个 IP 是否存储得非常简单(exists()),但需要一个单独的 redis 列表来跟踪存储的 IP(这需要我在添加/删除 IP 时非常小心)并且我必须执行 1 + count(ips) 操作才能获取所有存储的 IP 及其元信息。因此,这种方式适用于检查一个 IP 是否存在,但不适用于检索所有 IP。

是否有其他方法可以使用 redis 执行此操作,或者我是否必须使用上述方法之一(如果是,哪一个是最好的)?

4

2 回答 2

5

对于您的数据大小,这并不重要。

然而,这个黑客怎么样。使用分数为 IP 的有序集(将其视为一个数字,每个句点被视为 00,例如 127.0.0.1 => 1270000001),每个项目是 JSON 中的元数据和 IP

zadd ip_set 1270000001 '{ip:"127.0.0.1", note:"blah"}

然后得到你所做的一切

zrange ip_set 0 -1

并检查是否存在

zcount ip_set 1270000001
于 2012-04-13T14:17:32.973 回答
3

当然是第二种方式。这是一个键值存储。您应该完全按照您的描述使用密钥。Redis 执行操作非常快。不用担心1-2次操作。

于 2012-04-13T13:35:29.453 回答