【问题标题】:store and use lua scripts in redis在 redis 中存储和使用 lua 脚本
【发布时间】:2016-04-01 04:50:33
【问题描述】:

我在 redis 和 lua 中发现脚本实际上只用了 5 分钟,如果我遗漏了一些重要的点,请原谅我,但是有什么理由不保存一些 lua 函数redis 中作为某种 module 加载重用?粗略的例子:

redis 127.0.0.1:6379> set keyCount "return function(...) return table.getn(redis.call('keys', arg[1])) end"
redis 127.0.0.1:6379> eval "return loadstring(redis.call('get', KEYS[1]))()(ARGV[1])" 1 keyCount *

【问题讨论】:

  • 刚刚在写我的问题时注意到了这个tutorial

标签: lua redis


【解决方案1】:

你可以这样做,但它并不是很有用。您可能应该改用EVALSHA

【讨论】:

  • 脚本缓存是特定于数据库还是共享的?这上面的doc 是凶残的
【解决方案2】:

没有什么能阻止您执行您所描述的操作,即将 Lua 脚本源存储在 Redis 键中。

关于同一主题,我有一个小想法:https://gist.github.com/itamarhaber/e030fad40c5583b11e01

编辑:只是为了确保我们在同一个页面上,虽然没有什么能阻止你,但你也可能不应该......这与集群的分片不兼容。

【讨论】:

  • loadstring 在这里工作得很好。虽然我正在运行2.6.16
  • @Reno - 嗯,你是对的......我记得有一个问题。哦,好吧 :) 已编辑。
  • 我们的 redis 在单个节点上运行,所以它不是我们的 pb。但是,这对 redis 集群有何影响?我很好奇
  • 在集群中,每个key都分配给一个hash slot。一个脚本的键不能跨越多个哈希槽。
猜你喜欢
  • 2018-11-20
  • 2020-11-25
  • 2015-10-10
  • 2020-07-15
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 2016-05-20
相关资源
最近更新 更多