2016-01-08 62 views
1

我想從node.js運行一個bash腳本,以在每次重新啓動服務器時從redis中刪除所有會話密鑰。 我已經讀過Keys不應該用於刪除多個鍵與模式,因爲它會使服務器像DoS一樣的安全風險。這個bash腳本會以更安全的方式刪除密鑰嗎? xargs -L 1000是否意味着在每個循環中它將刪除1000個密鑰?我理解正確嗎?使用redis-cli中的通配符刪除多個密鑰的最佳方法

#!/bin/bash 
redis-cli --scan --pattern "SESSION:*" | xargs -L 1000 redis-cli del 

我接過了HERE的指揮線。

回答

3

我已經讀過Keys不應該用於刪除帶模式的多個密鑰,因爲它會使服務器承受像DoS這樣的安全風險。

不安全,只是拒絕服務,而KEYS正在運行,因爲它阻塞(如果回覆太大,很少出現OOM情形)。

這個bash腳本是一種更安全的方式來刪除鍵嗎?

我想說politer而不是更安全 - 這一個班輪將允許SCAN S之間送達而不是阻塞服務器進行期間的其他請求。

xargs -L 1000是否意味着在每個循環中它將刪除1000個密鑰?

這意味着每個DEL將有多達1000個鍵,具體取決於掃描結果。

我想從node.js運行一個bash腳本,以便每次服務器重新啓動時從redis刪除所有會話密鑰。

如果您的Redis實例僅用於存儲會話,則可以考慮使用FLUSHALL。或者,如果(並且你應該)每個會話密鑰都有一個TTL,那麼你可以在會話中使用每服務器重新啓動前綴,並讓舊會話自然過期。

相關問題