Redis SET 与 SETNX 性能

pza*_*zaj 7 redis node.js

我有一个简单的问题要问那些更熟悉 Redis 内部结构并且可能知道答案的人。

我使用 socket.io 并存储了 sessionID - socket(s) 的映射。除此之外,我使用 SET 命令来存储空值以指示用户已连接(如果没有套接字与 sessionID 关联)。为了考虑页面重新加载,DEL 命令在超时后执行。这导致我没有活动套接字,但在线状态仍然在 Redis 中设置的情况。

这意味着如果用户使用单个选项卡,则每次重新加载页面都意味着执行 SET 命令。我想知道的是 SETNX 是否会在这里性能更高?基本上,由 SETNX 执行的检查会比使用 SET 再次设置值更快吗?假设该值将在 99.99% 的情况下存在。

我的猜测是它应该更快,但也许有些我不知道。那么谁能证实我的猜测或解释我为什么 SET 可能仍然更快?

Ita*_*ber 6

一般来说,SETNX可以稍微快一点,因为它有时不会设置值。但是,在您的用例中,考虑到值的大小(空字符串),性能差异可能可以忽略不计。测试它是确定的:)

  • 我还要补充一点,两者的时间复杂度都是 O(1),这意味着它们在性能方面都很快。https://redis.io/commands/setex 。https://redis.io/commands/set (2认同)
  • @MykolaBorysyuk 是的,但是 big-Oh 是衡量复杂性的一个指标。一个命令的 O(1) 不是 necc。与另一个相同,并且 O(N^N) 可能比 O(1) 完成得更快,具体取决于所涉及的实际计算。 (2认同)