Sql 如何使用“更新zset分数”;where子句;在redis

Sql 如何使用“更新zset分数”;where子句;在redis,sql,database,redis,Sql,Database,Redis,在MySQL中: update zset.1 set score = score + 10 where value = 1 and score > 100 这意味着它不会更新,除非分数是gt 100 在Redis和程序代码中: score = zscore zset.1 1 if (score > 100) { score = zincrby zset.1 10 1 } 这应该是可行的,但它不是原子的。同时更新时,分数将更新多次 另外,“WATCH”不适合我的情况,因为它的重

在MySQL中:

update zset.1 set score = score + 10 where value = 1 and score > 100
这意味着它不会更新,除非分数是gt 100

在Redis和程序代码中:

score = zscore zset.1 1
if (score > 100) {
  score = zincrby zset.1 10 1
}
这应该是可行的,但它不是原子的。同时更新时,分数将更新多次


另外,“WATCH”不适合我的情况,因为它的重试机制将是一个性能问题。

有两种方法:

  • 使用Redis
    multi()
    /
    exec()
    组合以原子方式执行一系列Redis调用
  • 写一个Lua脚本。有关更多信息,请参阅