当前位置: 首页 > 面试题库 >

Redis INCRBY有限制

伊铭
2023-03-14
问题内容

我想知道是否有一种方法可以通过我的应用程序进行一次往返操作来在Redis中执行此操作:

对于给定的键K,其可能的值V是范围内的任何整数[A, B]。基本上,它具有上下边界。

当发出INCRBYor DECRBY命令时(例如INCRBY key 10), 当结果值没有超出范围 时才 执行。

我需要这个操作是原子的,并且我想知道是否有一种方法可以避免为此编写Lua脚本。

谢谢。


问题答案:

这个答案可能不是您所期望的。但是我不得不说,Lua脚本是非常清晰的解决方案。

-- range-incrby.lua key , increment
local key = KEYS[1]
local increment = ARGV[1]
local cnt = redis.call('get', key) or 0
cnt = cnt + increment
if (cnt >= 0 and cnt <= 100) then
    redis.call('set', key, cnt)
    return cnt
end

另外,如果范围是[0, 2^N - 1],则可以使用BITFIELD带有溢出控制的命令来解决该问题。

BITFIELD key OVERFLOW FAIL INCRBY uN 0 increment

但是,这似乎不是您的情况。



 类似资料:
  • 问题内容: 我有表-s在许多一对多的关系与-s 目标是通过单个查询列出球员及其“前三项技能”。 小提琴 查询: 正如您在小提琴中看到的那样,查询结果仅缺少3个技能的限制。 我尝试了子查询的几种变体..联接等等,但是没有任何效果。 问题答案: 一种比较古怪的方法是对结果进行后处理: 当然,这是假设您的技能名称不包含逗号,并且数量很少。 小提琴 一个功能请求用于支持一个明确的条款是可惜还是没有得到解决

  • 问题内容: 我正在寻找一个数量有限的SortedSet实现。因此,如果添加了更多元素,则比较器将决定是否添加该元素,并从集合中删除最后一个元素。 标准API中是否有一种优雅的方法可以完成此任务? 我写了一个JUnit测试来检查实现: 问题答案: 使用标准API,您必须自己完成操作,即扩展已排序的集合类之一,并将所需的逻辑添加到和方法。不应该太难。 顺便说一句,我不完全理解你的例子: 之后不应该包含

  • 是否有一种方法/pattern来实现? promise-数组包含构造和返回promise的函数 应在所有解析后解析 只有promise应并行运行 第n+1个promise应在n个完成后立即开始。以便始终有解析器并行运行。

  • 问题内容: 具体说说(服务器端)V8,并假设我不担心准确性,因为我可以检测和补偿它,那么我可以使用setTimeout 逐字 间隔设置几千个相对简单的超时,而无需面对任何其他限制除了RAM以外?如果我要使用一个在任何给定时间可能有数千个计划的超时的系统,我应该注意什么吗? 作为记录,我已经阅读了John’s Resig关于Javascript计时器如何工作的出色文章,因此无需指出那里已经介绍的内容

  • 我正在开发一个。NET应用程序(例如A)将与其他应用程序对话。NET应用程序(例如B)。应用程序A将被Java应用程序(比如X)使用。我目前正在使用Apache Thrift。除了对OOPS特性(如重载和继承)的基本支持外,Thrift非常棒。当然,我们可以用我们想要的方式定制Thrift编译器,因为它是一种开源技术。 我的一个朋友建议在应用程序A中使用WCF并使用WSHttp绑定。使用Basic

  • 概述 Javascript Finite State Machine函数库 参考链接 概述 有限状态机(Finite-state machine)是一个非常有用的模型,可以模拟世界上大部分事物。 简单说,它有三个特征: 状态总数(state)是有限的。 任一时刻,只处在一种状态之中。 某种条件下,会从一种状态转变(transition)到另一种状态。 它对JavaScript的意义在于,很多对象可