【问题标题】:Redis / Node delete with prefix / wildcard带前缀/通配符的 Redis / 节点删除
【发布时间】:2020-08-21 14:43:25
【问题描述】:

我需要使用 NodeJS 来删除 Redis 中匹配前缀/通配符的所有记录。我正在使用这个包:https://github.com/NodeRedis/node_redis

我已经看到了几种可用于删除具有前缀和通配符的 Redis 键的解决方案,例如

KEYS "web.*"

但是,所有这些解决方案都依赖于使用 KEYS 命令,由于它锁定了服务器,因此不适合生产。我相信正确的解决方案涉及SCAN 命令(可能还有其他命令),但我并不完全理解它是如何工作的。

我正在寻找一个简单的 JS 函数,它允许我传入一个包含前缀和通配符的字符串,例如"web.*" 和所有 "keys" 匹配的键都将被删除。

非常感谢!

【问题讨论】:

    标签: javascript node.js redis node-redis


    【解决方案1】:

    Redis 是单线程的,所以无论如何它都会阻塞。 Scan 以迭代方式返回结果,因此虽然它仍然阻塞,但只要它返回整体结果的子集,它就不会阻塞。
    https://redis.io/commands/scan

    这里有一个扫描解决方案,它可能对你有用,也可能对你不起作用,这取决于你是否需要它是原子的。 How to atomically delete keys matching a pattern using Redis

    【讨论】:

    • 如何使用node_redis调用"EVAL"return redis.call('del', unpack(redis.call('keys', ARGV[1])))" 0 prefix:*"?谢谢!
    • 没有很好的文档。但是,如果您深入研究 node_redis 源代码,您可以找到一些示例。 github.com/NodeRedis/node_redis/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2021-07-22
    • 2019-09-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多