Lua在Redis中的执行 - Atomicity&规模有多大?

时间:2015-07-30 09:54:19

标签: lua redis

我在Redis <K,V>中有一些键,其中V是以逗号分隔的子字符串V: <v1,v2,v3,...,vn>字符串。

到目前为止,我只是通过在Jedis中使用事务来设置密钥(Java中的Redis API)。但是新要求需要我对现有密钥执行一些操作。所以我有两个选择:

  1. 检索密钥,执行操作,设置密钥
  2. 对Lua中的操作进行编码,并将该文件与键一起作为参数传递。
  3. 选项2似乎更快,因为它将节省往返但我有以下注意事项:

    1. 如果Lua在Redis之间执行失败怎么办,比如在n键之后。 (可能是脚本或Redis的问题)。 Redis确保一致性吗?在选项1中,我可以中止写入并防止状态不一致。
    2. 我理解的Lua脚本将键作为参数。但是我需要操作1000万个键。 Lua是否有如此庞大的争论名单?
    3. 我的解决方案

      由于正如下面的答案所说,它们都不是可行的选择。我在C中编写了自己的Redis命令并编译了源代码。所以现在我打电话给

      redis-cli> MyCommand K V
      

      对于管道中的每个<K,V>。我按照教程 - Hacking Redis进行了操作。但是它可能不够,需要自己浏览和理解一些代码!

1 个答案:

答案 0 :(得分:3)

wrt#1 - Lua脚本是原子的,但它提供这种类型的一致性保证。如果脚本失败,Redis会自动回滚其更新 。有一项建议可以改善这种行为,但尚未被Redis接受(请参阅Josiah Carlson的博客:http://www.dr-josiah.com/2015/07/transactions-in-redis.html

wrt#2 - 我不知道这么大的名单会不会顺利进行,但如果你需要它,你可能会错误地使用它;)