5

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

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

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

4

2 回答 2

5

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

请参阅 spring-data redis 文档

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

看到这个线程

于 2014-05-17T20:30:03.887 回答
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 具有“scriptLoad”方法,允许您加载脚本。

于 2016-10-19T08:52:03.250 回答