我在 Redis 缓存中有大约 150,000 个键,需要删除其中 >95% 的键 - 包括特定键前缀匹配的所有键 - 作为缓存重建的一部分。我认为有三种方法可以实现这个需求:
(背景:Redis 在 Microsoft Dynamics CRM API 前作为视图模型使用,因此缓存在第一次运行时通过从 CRM 中提取约 100K 条记录来填充,并通过在 CRM 内部发布通知来保持同步。数据无限期缓存在 Redis 中,我们在处理一种特定情况,即 CRM 插件在一段时间内失败,导致缓存漂移并最终需要我们清除和重建缓存。)
- 使用 server.Keys(pattern) 提取与我的前缀模式相匹配的整个键列表,并遍历这些键,逐个调用 KeyDelete 进行删除。
- 维护一个 Redis 集合中的键列表 - 每次插入值时,同时将键插入相应的键集合中,然后检索这些集合而不是使用 Keys。这样可以避免昂贵的 Keys() 调用,但仍然需要逐个删除数万条记录。
- 将所有易失数据隔离到一个指定的编号数据库中,在缓存重建开始时完全清除该数据库。
(背景:Redis 在 Microsoft Dynamics CRM API 前作为视图模型使用,因此缓存在第一次运行时通过从 CRM 中提取约 100K 条记录来填充,并通过在 CRM 内部发布通知来保持同步。数据无限期缓存在 Redis 中,我们在处理一种特定情况,即 CRM 插件在一段时间内失败,导致缓存漂移并最终需要我们清除和重建缓存。)