2017-05-12 156 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)更快地完成,這取決於所涉及的實際計算。 –