如何在redis中使用“where子句”更新zset分数
Posted
技术标签:
【中文标题】如何在redis中使用“where子句”更新zset分数【英文标题】:How to update a zset score with "where clause" in redis 【发布时间】:2014-01-27 03:24:53 【问题描述】:在 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”不适合我的情况,因为它的 RETRY 机制将是一个性能问题。
【问题讨论】:
【参考方案1】:有两种方法:
使用 Redismulti()
/exec()
组合原子地执行一系列 Redis 调用。 See Redis Transactions。
编写 Lua 脚本。请参阅documentation for eval
function in Redis 了解更多信息。
【讨论】:
以上是关于如何在redis中使用“where子句”更新zset分数的主要内容,如果未能解决你的问题,请参考以下文章
使用 MS Access 如何使用多个连接和 where 子句执行更新?
如何使用条件(where子句)更新实体并在spring数据jpa中的方法响应中获取更新的实体