【发布时间】:2015-10-21 14:54:14
【问题描述】:
我在 Redis <K,V> 中有一些键,其中 V 是逗号分隔的子字符串 V: <v1,v2,v3,...,vn>。
到目前为止,我只是在 Jedis(Java 中的 Redis API)中使用事务来设置密钥。但是一个新的需求需要我对现有的键执行一些操作。所以我有两个选择:
- 检索密钥、执行操作、设置密钥
- 在 Lua 中对操作进行编码,并将文件与键一起作为参数传递。
选项 2 似乎更快,因为它可以节省往返行程,但我有以下考虑:
- 如果在 Redis 之间 Lua 执行失败怎么办,比如在 n 个键之后。 (可能是脚本或 Redis 的问题)。 Redis 是否保证一致性?在选项 1 中,我可以中止写入并防止出现不一致的状态。
- 据我所知,Lua 脚本将键作为参数。但是我需要操作 1000 万个键。 Lua 是否可以处理如此庞大的参数列表?
我的解决方案
正如下面的答案所说,它们都不是一个可行的选择。我用 C 编写了自己的 Redis 命令并编译了源代码。所以现在我会打电话给
redis-cli> MyCommand K V
对于管道中的每个<K,V>。我按照这里的教程-Hacking Redis。但是可能还不够,需要自己浏览和理解一些代码!
【问题讨论】: