是否可以将EVAL SHA与spring-data redis一起使用?

时间:2014-05-16 05:49:36

标签: java redis spring-data-redis

是否可以将Redis命令EVAL SHA命令与Spring-Data Redis一起使用?

我们成功使用EVAL执行命令:redisTemplate.execute(script, null, args);, 但是每次将脚本传输到Redis服务器似乎都会产生很大的开销。

是否可以使用Spring-Data Redis将脚本存储一次并根据其SHA运行?

2 个答案:

答案 0 :(得分:4)

  

默认的ScriptExecutor通过检索来优化性能   脚本的SHA1并尝试首先运行evalsha,退回   如果脚本尚未存在于Redis脚本缓存中,则进行评估。

see spring-data redis docs

案例是"当我们有主/从配置时,即使我在两台服务器上安装了相同的脚本并使用evalsha调用主服务器,主服务器也会将整个脚本转发给带有eval的服务器每次命令"。

see this thread

答案 1 :(得分:1)

也许你可以这样做:

final String scriptString1= script1.getScriptAsString();
            redisTemplate.execute(new RedisCallback<String>(){
                @Override
                public String doInRedis(RedisConnection connection) throws DataAccessException {
                    DefaultStringRedisConnection newConnection = new DefaultStringRedisConnection(connection);
                    return newConnection.scriptLoad(scriptString1);
                }
            });

DefaultStringRedisConnection具有方法&#34; scriptLoad&#34;并允许您加载脚本。