【发布时间】:2016-07-28 14:13:43
【问题描述】:
我在 Redis 缓存中有大约 150,000 个键,作为缓存重建的一部分,我需要删除其中 95% 以上的键——所有键与特定键前缀匹配。正如我所看到的,有三种方法可以实现这一点:
- 使用 server.Keys(pattern) 提取与我的前缀模式匹配的整个键列表,并遍历每个键调用 KeyDelete 的键。
- 维护Redis set 中的key 列表——每次插入值时,我也会在对应的key set 中插入key,然后检索这些set 而不是使用Keys。这将避免昂贵的 Keys() 调用,但仍依赖于逐条删除数万条记录。
- 将我的所有易失数据隔离在特定编号的数据库中,并在缓存重建开始时将其完全刷新。
我正在使用 .NET 和 StackExchange.Redis 客户端 - 我在其他地方看到过使用 CLI 或依赖 Lua 脚本的解决方案,但似乎没有解决这个特定用例的问题 - 我是否错过了一个技巧,或者这只是你不应该用 Redis 做的事情吗?
(背景:Redis 充当 Microsoft Dynamics CRM API 前面的视图模型,因此在第一次运行时通过从 CRM 中提取大约 10 万条记录来填充缓存,然后通过从 CRM 中发布通知来保持同步每当一个实体被修改时,数据会无限期地缓存在 Redis 中,我们在这里处理一个特定的场景,即 CRM 插件在一段时间内无法触发,这会导致缓存漂移,最终需要我们刷新和重建缓存。 )
【问题讨论】:
-
对于选项 2。您可以使用标记机制进行失效,例如 this one using LUA 或 this one supporting cluster