【问题标题】:Redis Stack Exchange how to delete or get keys by patternRedis Stack Exchange 如何按模式删除或获取密钥
【发布时间】:2014-12-16 19:17:21
【问题描述】:

我在 C# 中安装了 Stack Exchange redis 客户端。 我只能删除一个键或键数组,但我不知道如何删除带前缀的键。 或者另一种解决方案可以首先按模式获取所有键,然后删除它们。但我也不知道如何通过模式获取密钥。

【问题讨论】:

    标签: c# redis stackexchange.redis


    【解决方案1】:

    删除是按键分开的,除非你刷新整个数据库。

    在IServer API 上很容易获得密钥扫描,这里有更多讨论:https://stackexchange.github.io/StackExchange.Redis/KeysScan

    但是,在生产环境中通常仍应避免使用它——这不是 redis 的预期用例。

    【讨论】:

    • 您的文档链接已失效。
    • @ErroneousFatality 已修复,ta
    【解决方案2】:

    您可以按照以下方式从redis缓存中批量删除项目。 (StackExchange.Redis.StrongName v1.0.488)

    foreach (var ep in _muxer.GetEndPoints())
    {
        var server = _muxer.GetServer(ep);
        var keys = server.Keys(database: _redisDatabase, pattern: pattern + "*").ToArray();
        _db.KeyDeleteAsync(keys);
    }
    

    _muxer 是ConnectionMultiplexer 的实例

    它不会按照您的要求按模式删除,但比单独删除每个键要快得多。

    【讨论】:

    • 这在集群中是如何工作的?我们获得了两倍的端点(包括从属)并删除了太多的键,我们应该过滤 server.IsSlave == false 吗?
    • 没试过,但我认为你应该调用在单一删除方法中使用的相同服务器。
    • 另外读者应该考虑如果使用集群可能还有另一个数据库(_redisDatabase默认为0)
    • 它有效。要添加的一件事是我在直接连接到主/从节点时遇到了一个问题。对我来说,帮助在本地机器上禁用 vpn 或在 prod 机器上运行代码。由于某种原因,无法解析 IP 地址。
    • _muxer 的 DI 是什么?我正在使用 services.AddStackExchangeRedisCache 并尝试 DIing ConnectionMultiplexer,但它返回为空。
    猜你喜欢
    • 2013-10-06
    • 2015-12-18
    • 1970-01-01
    • 2014-02-14
    • 2016-12-05
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多