gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 06:13:17 26 4
gpt4 key购买 nike

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

  1. 将整个数据库用作一个“集合”,只需SET一个键并通过GET检查它是否存在(或使用EXISTS正如@Sergio Tulentsev 在评论中提到的那样)
  2. 使用 SADD 将所有成员添加到 key 并通过 SISMEMBER 检查是否存在

哪个更好?如果我选择第一种方法并且数据库中的键数变大,与单个集合中相同数量的键相比,会不会有问题?

最佳答案

其实除了这两种方法,你还可以使用HASH数据结构配合HEXISTS命令(我把这种方法称为第三种方案)。

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

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

Does the key has value?

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

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

Does the value has structure?

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

Do you need to do set operations?

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

Memory efficiency consideration

Redis 对小的SETHASH 采用更节省内存的编码。所以当你有很多小数据集时,采用第二种和第三种解决方案可以节省大量内存。参见 this了解详情。

更新

Do you need to set TTL for these keys?

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

关于redis - 使用 set 或只是在 redis 中创建键来检查是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46143574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com