使用set或只是在redis中创建密钥来检查是否存在?

时间:2017-09-10 17:30:01

标签: redis

我可以想到使用redis检查存在的两种方法:

  1. 将整个数据库用作'设置',只需SET一个密钥并通过GET检查存在(或使用EXISTS中提到的评论@Sergio Tulentsev)
  2. 使用SADD将所有成员添加到密钥并按SISMEMBER
  3. 检查是否存在

    哪一个更好?如果我选择第一种方法并且数据库中的键数变得更大,那么与单个组中的相同数量的键相比,这是一个问题吗?

1 个答案:

答案 0 :(得分:1)

实际上,除了这两种方法之外,您还可以将HASH数据结构与HEXISTS命令一起使用(我将此方法称为第三种解决方案)。

所有这些解决方案都足够快,如果你有一个很大的SETHASH或密钥空间,这不是问题。

那么,我们应该使用哪一个? 这取决于很多事情......

  

密钥有价值吗?

第一个和第三个解决方案的键都可以有值,而第二个解决方案不能。

因此,如果每个密钥没有值,我更喜欢第二个解决方案,即SET解决方案。否则,您必须使用第一个或第三个解决方案。

  

该值是否具有结构?

如果值不是原始字符串,而是数据结构,例如LISTSET。你必须使用第一个解决方案,因为HASH的值只能是原始字符串。

  

您需要进行设定操作吗?

如果需要对多个数据集执行交集,并集或差异操作,则应使用第二个解决方案。 Redis具有用于这些操作的内置命令,尽管它们可能是慢速命令。

  

内存效率考虑

Redis为小SETHASH采用更高内存效率的编码。因此,当您拥有大量小数据集时,采用第二种和第三种解决方案可以节省大量内存。有关详细信息,请参阅this

<强>更新

  

您需要为这些键设置TTL吗?

正如@dizzyf在评论中指出的那样,如果您需要为这些密钥设置TTL,则必须使用第一个解决方案。因为HASHSET的项目没有过期属性。您只能为整个TTLHASH设置SET,而不是其元素。