2016-11-28 2 views
0

접두사/와일드 카드와 일치하는 Redis의 모든 레코드를 삭제하려면 NodeJS를 사용해야합니다. 이 패키지를 사용하고 있습니다 : https://github.com/NodeRedis/node_redis접두사/와일드 카드가있는 Redis/Node delete

접두사와 와일드 카드가있는 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

node_redis를 사용하여 "EVAL"return redis.call ('del', unpack (redis.call ('keys', ARGV [1])))을 어떻게 호출합니까? 감사! – John1984

+1

그것에 대한 훌륭한 문서가 없습니다. 그러나 node_redis 소스를 파헤 치면 몇 가지 예를 찾을 수 있습니다. https://github.com/NodeRedis/node_redis/blob/ff9b727609ea125919828f7373e40082fd432eec/test/commands/eval.spec.js#L135 – davissp14