You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在Redis中创建自定义函数,直接执行乘法等算术运算返回结果

Redis自定义函数使用说明

Redis完全支持在服务端创建并存储自定义函数,直接完成算术运算等逻辑处理后返回结果,可解决你批量数据计算时应用层循环耗时过长的问题。

两种实现方案

  • 方案1:Redis 7.0+ 内置Functions(推荐)
    该版本新增的函数功能支持将自定义逻辑持久化存储在Redis中,可重复调用无需每次上传脚本。你可以按如下示例实现批量数值乘法聚合:
-- 加载批量数值乘法求和函数
FUNCTION LOAD "#!lua name=math_custom
redis.register_function('batch_mul_sum', function(keys, args)
    -- 取传入的乘数参数
    local factor = tonumber(args[1])
    local res = 0
    -- 遍历所有目标key取值计算
    for _, key in ipairs(keys) do
        local val = tonumber(redis.call('GET', key))
        if val ~= nil then
            res = res + val * factor
        end
    end
    return res
end)"

调用时直接执行以下命令即可直接返回计算完成的最终结果:
FCALL batch_mul_sum <key数量> <key1> <key2> ... <keyN> <乘数>
示例:如果要给10000个key对应的数值乘以2后求和,命令为FCALL batch_mul_sum 10000 key1 key2 ... key10000 2

  • 方案2:低版本Redis使用Lua脚本实现
    7.0以下版本无法持久化存储自定义函数,但可以通过EVAL命令直接在服务端执行Lua计算逻辑,同样避免大量数据传输到应用层处理:
EVAL "local factor = tonumber(ARGV[1]) local res = 0 for _, key in ipairs(KEYS) do local val = tonumber(redis.call('GET', key)) if val then res = res + val * factor end end return res" <key数量> <key1> <key2> ... <keyN> <乘数>

注意事项

  • Redis的函数和Lua脚本都在单线程中执行,避免编写过于复杂或耗时过长的逻辑,防止阻塞其他正常请求
  • 单次传入的key数量过多时可以拆分多次调用,避免单请求超时
  • 生产环境使用自定义函数时建议配置ACL权限控制,限制函数的调用范围避免安全风险

内容的提问来源于stack exchange,提问作者Rajesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:57:00