【问题标题】:How can i upsert (replace) operation in Redis? (as Pipelined)如何在 Redis 中更新(替换)操作? (作为流水线)
【发布时间】:2011-08-22 11:15:49
【问题描述】:

更新插入(替换)

  • 如果存在则更新
  • 如果不存在则插入

(使用主键作为管道)

【问题讨论】:

    标签: redis upsert


    【解决方案1】:

    “如果存在则更新”是什么意思?标准 Redis SET 命令(SETMSETHSETLSET 等)将更新(覆盖)现有密钥,如果密钥已经存在,或者插入新密钥,如果密钥不存在存在。

    听起来你在要求默认行为。

    【讨论】:

    • 如果我想有条件的 upsert 怎么办?意思是如果他们的密钥不存在,则插入它,如果不比较现有时间戳与新时间戳,则仅在其新时更新。想在不使用 lua 脚本的情况下做到这一点
    • Redis 键没有时间戳,除了过期时间。如果您在键上设置过期时间戳,那么使用setnx 或其他包含nx 的命令非常容易(这基本上意味着“如果存在则不存在”)。然后,当您的过期密钥被删除时,您的插入将会发生,但不会在那之前。 --- 也可以使用两个键:一个带有值,一个带有时间戳,并在更新值键之前获取该时间戳。如果你需要它是原子的,可以用 Lua 或 WATCH+EXEC 来完成。 --- 这个问题可能是 stackoverflow 上的问题。
    【解决方案2】:

    redis 还支持其他数据结构,例如 SET、Sorted SET 和 SET 命令仅适用于字符串值,因为它需要字符串键和字符串值。

    【讨论】:

      猜你喜欢
      • 2014-04-04
      • 2010-11-01
      • 2017-03-24
      • 1970-01-01
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 2012-09-02
      相关资源
      最近更新 更多