使用Jedis Client重命名命令示例

时间:2014-02-03 22:34:57

标签: redis jedis

我正在使用Spring Jedis Client在我的应用程序中使用Redis。我想重命名这些命令,这样只要他们能够连接到我的服务器,其他任何人都无法触发它们。

任何人都可以举例说明如何使用Jedis中的rename命令,然后如何使用修改过的命令激活后续命令?

2 个答案:

答案 0 :(得分:1)

您无法重命名Redis命令,但无需更改配置文件issue #640

即使您添加rename-command配置文件指令并重新启动Redis,Jedis似乎也不允许轻松发送任意命令或提供重命名的简单(即无代码更改)方式。

但是,如果您真的坚持重命名命令然后从Jedis调用它,那么您可以做什么呢。这可能会出现在我的丑陋黑客(:)中,但是在我rename-command get foo添加/etc/redis/redis.conf并执行service redis-server restart之后我会做些什么:

$ redis-cli 
redis 127.0.0.1:6379> set bar baz
OK
redis 127.0.0.1:6379> get bar
(error) ERR unknown command 'get'
redis 127.0.0.1:6379> foo bar
"baz"
redis 127.0.0.1:6379> eval "return(redis.call('get', KEYS[1]))" 1 bar
(error) ERR Error running script (call to f_db0e060e4f58231d51f21685b20ff847de8ab9e1): Unknown Redis command called from Lua script 
redis 127.0.0.1:6379> eval "return(redis.call('foo', KEYS[1]))" 1 bar
"baz"
redis 127.0.0.1:6379>

当然,如果你选择这条路线,你的代码可能会在任何时候都变得非常混乱,所以要小心你去哪里......祝你好运!

答案 1 :(得分:0)

如果恶意用户直接连接到Redis,则可以访问所有操作码。

Redis库中没有重命名命令的功能。即使您公开了对重命名命令的自定义API的访问权限,也无法更改Redis本身的内部操作码。

编辑:

你是对的,可以通过改变配置文件来重命名命令!

设置新命令名后,必须重新编译Jedis。

首先在src/main/java/redis/clients/jedis/Protocol.java第203行重命名枚举。

现在在src/main/java/redis/clients/jedis/BinaryClient.java上找到相应的枚举用法并进行更改。

这可能就足够了:在任何地方你仍然保留旧命令java接口(例如zadd等),而在Jedis中它将与Redis通信,调用重命名的命令。

这是你的意图吗?

相关问题