【问题标题】:Handle large numbers with precision in Redis Lua在 Redis Lua 中精确处理大量数字
【发布时间】:2013-06-22 15:42:01
【问题描述】:

我需要在与 Redis 一起使用的 Lua 中处理大量数据。通常你会这样做:

require"bc"
bc.mul(...)
bc.mod(...)

等等。 但不幸的是 Redis Lua 不支持“require”。我发现的唯一方法是将用 lua 本身编写的大量数字库直接插入到脚本中。

我能接触到的唯一此类库:oss.digirati.com.br/luabignum/index.htm

我可以为了具体脚本的目的剥离库,但它仍然很大。有什么方法可以更有效地处理 Redis Lua 中的大量数据?

UPDATE1:如果我将整个库保存到一个密钥中,然后像这样访问它:

local BigNumLib = KEYS[1];
BigNumLib.BigNum.mul(KEYS[2],KEYS[3]);

我不确定语法,也许我需要将所有库包含在一个 lua 表 {} 中。

【问题讨论】:

  • 我认为这里没有方便的解决方案,除了调整 Redis 源代码本身。

标签: lua redis largenumber


【解决方案1】:

我不熟悉 Redis 如何处理 Lua 代码,但是为什么将库本身插入到您的代码中是一个问题?你应该可以做这样的事情:

local bc = function()
  -- insert the code of BigNum.lua here
  return BigNum
end
bc.mul(....)

代码可能是在Lua 5.1之前写的,所以不知道有没有兼容性问题,不过这至少应该让你有个开始。

【讨论】:

  • 这是一个问题,因为其中包含库的每个请求都是 25 KB。
  • 不一定,因为你可以使用 EVALSHA。第一个请求将是 25 KB,随后的请求将只有几个字节。您将节省一些带宽。但是,Lua 引擎在每次执行时必须解释 25 KB 的数据,是的。
  • @MidnightCoder,你可以修剪代码只留下你需要的那些方法。
猜你喜欢
  • 2017-12-29
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多