2017-05-12 155 views
2

我对那些更熟悉Redis内部组件并且可能知道答案的人有一个简单的问题。Redis SET vs SETNX性能

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

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

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

回答

4

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

+2

我还会补充说,时间复杂度都是O(1)这意味着性能明智,他们都快。 https://redis.io/commands/setex。 https://redis.io/commands/set –

+0

好吧,这就是我的想法,我想我会转向SETNX,因为与命令执行次数相比,该值非常少设置(就像我说的,99% +次不会被设置)。但我肯定会测试它,只是为了确保。万分感谢!我会等待一下,看看是否有新的答案弹出,然后将其标记为接受的答案。 – user1970395

+1

@MykolaBorysyuk真实,但很大 - 哦是一种复杂性的衡量标准。一个命令的O(1)不是necc。与另一个相同,并且O(N^N)可以比O(1)更快地完成,这取决于所涉及的实际计算。 –