【问题标题】:Prevent string duplicates with Redis使用 Redis 防止字符串重复
【发布时间】:2014-03-25 04:13:15
【问题描述】:

有没有正确的方法来防止 Redis 插入重复项?

我正在尝试存储多个字符串,并且键 字符串都必须是唯一的。如果字符串的值或键已经存在,我想让 Redis refuse 创建字符串。

谢谢!

【问题讨论】:

  • 你想维护键值对 {k1=>v1, k2=>v2, k3=>v3...} 使得 {k1, k2, k3...} 显然是唯一且 {v1, v2, v3 ...} 也是唯一的?

标签: redis


【解决方案1】:

我想应该有几种方法。

唯一性是否必须在一对键/值的范围内?即是否可以多次使用相同的 value,每次都关联到不同的键?

如果是这样,那么其中一个更简单的(但一如既往 - 它实际上取决于您的用例以及您需要的键/值对的数量、读/写比率等)是这样的:

使用SET 类型的键。每个键将只包含一个值(成员),而不是通常使用集合来保存集合。

这样,每当您尝试创建名称已存在的密钥时,Redis 都会拒绝。每当您尝试为给定键创建一个值时,如果该值已经作为键集的成员存在,Redis 也会拒绝。

【讨论】:

  • 感谢您的回复。不幸的是,我正在努力确保每个值和键不能插入两次。 Redis 有什么自然的方法吗?
  • 维护一个不同的SET 的所有值。然后,每当您添加新条目时,首先将值添加到该集合中,如果失败,则表示该值已经存在。如果成功,请添加您的键+值(这次是纯 Redis 字符串键/值)。如果失败,则意味着密钥已经存在,然后您应该从之前插入的SET 中删除您的值。
【解决方案2】:

您可以先使用EXISTS命令检查一个键是否存在,然后使用SISMEMBER命令判断集合中的值是否存在,然后插入键值对。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2021-03-19
    • 1970-01-01
    • 2015-06-25
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多