gpt4 book ai didi

redis - 如何使用 StackExchange.Redis 删除与指定键模式匹配的所有键?

转载 作者:IT王子 更新时间:2023-10-29 06:02:25 27 4
gpt4 key购买 nike

我在 Redis 缓存中有大约 150,000 个键,作为缓存重建的一部分,我需要删除其中超过 95% 的键——所有键都匹配特定的键前缀。正如我所看到的,可以通过三种方式实现这一目标:

  1. 使用 server.Keys(pattern) 提取与我的前缀模式匹配的整个键列表,并遍历为每个键调用 KeyDelete 的键。
  2. 在 Redis 集合中维护一个键列表——每次我插入一个值时,我也将键插入相应的键集合中,然后检索这些集合而不是使用键。这将避免昂贵的 Keys() 调用,但仍然依赖于一条一条地删除数万条记录。
  3. 将我所有的 volatile 数据隔离在一个特定编号的数据库中,并在缓存重建开始时将其完全刷新。

我正在使用 .NET 和 StackExchange.Redis 客户端 - 我在其他地方看到过使用 CLI 或依赖 Lua 脚本的解决方案,但似乎没有解决这个特定用例的问题 - 我是否错过了一个技巧,或者这只是你不应该用 Redis 做的事情吗?

(背景:Redis 充当 Microsoft Dynamics CRM API 前面的 View 模型,因此在第一次运行时通过从 CRM 中提取大约 10 万条记录来填充缓存,然后通过从 CRM 中发布通知来保持同步每当一个实体被修改时,数据会无限期地缓存在 Redis 中,我们正在处理一个特定的场景,即 CRM 插件在一段时间内无法触发,这会导致缓存漂移,最终需要我们刷新并重建缓存。 )

最佳答案

选项 2 和 3 都是合理的。

避开选项 1。KEYS 确实很慢,而且只会随着 key 空间的增长而变慢。

我通常会选择 2(没有 LUA,包括 LUA 会增加学习曲线以支持解决方案 - 当然,如果证明它的存在是明确/记录的,这当然很好。),但 3 绝对可以是竞争者,快速而简单,只要你能确定你不会超过配置的数据库限制。

关于redis - 如何使用 StackExchange.Redis 删除与指定键模式匹配的所有键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36480552/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com