2016-11-28 48 views
0

我需要使用到的NodeJS刪除Redis的匹配前綴/通配符的所有記錄。我使用這個包:https://github.com/NodeRedis/node_redis的Redis /節點刪除前綴/通配符

我見過幾個可用的解決方案,以刪除的Redis鍵中配有前綴和例如通配符

KEYS "web.*" 

然而,所有這些解決方案依賴於使用KEYS命令,由於它鎖定了服務器,不適合生產。我相信正確的解決方案涉及到SCAN命令(也許還有其他),但我不完全理解它是如何工作的。

我在尋找一個簡單的JS功能,讓我在一個字符串傳遞包含前綴和通配符例如「web。*」和所有「鍵」匹配鍵將被刪除。

非常感謝!

回答

0

的Redis是單線程的,因此它會不顧阻攔。 Scan以迭代的方式返回結果,所以當它仍然阻塞時,只要它返回整個結果的一個子集,它就不會阻塞它。
https://redis.io/commands/scan

這裏有一個掃描解決方案,可能會或可能不會爲你工作,這取決於你是否需要它是原子。 How to atomically delete keys matching a pattern using Redis

+0

你怎麼稱呼「EVAL」return redis.call('del',unpack(redis.call('keys',ARGV [1])))「0 prefix:*」using node_redis?謝謝! – John1984

+1

沒有很好的文檔。但是,如果您深入瞭解node_redis源,則可以找到一些示例。 https://github.com/NodeRedis/node_redis/blob/ff9b727609ea125919828f7373e40082fd432eec/test/commands/eval.spec.js#L135 – davissp14