2017-11-03 17 views
0

spring-bootプロジェクトでredisTemplateを使用してluaスクリプトを実行しようとしています。 jedisはredisクラスタのためのluaスクリプトの実行をサポートしていないようです...他の選択肢はありますか?ありがとう!spring-boot redisTemplateスクリプト実行エラー:クラスタ環境でEvalShaがサポートされない

Redisの設定:

spring: 
    redis: 
    cluster: 
     nodes: 
     - 192.168.0.111:6390 
     - 192.168.0.111:6391 
     - 192.168.0.111:6392 

コード:

@Component 
public class Example { 

@Autowired 
private RedisTemplate redisTemplate; 

@Autowired 
RedisScript<Boolean> script; 

public boolean checkAndSet(String expectedValue, String newValue) { 
    return (boolean) redisTemplate.execute(script, singletonList("key1"), asList(expectedValue, newValue)); 
} 
} 

エラーログ:

org.springframework.dao.InvalidDataAccessApiUsageException: EvalSha is not supported in cluster environment. 

at org.springframework.data.redis.connection.jedis.JedisClusterConnection.evalSha(JedisClusterConnection.java:3568) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.springframework.data.redis.core.CloseSuppressingInvocationHandler.invoke(CloseSuppressingInvocationHandler.java:57) 
at com.sun.proxy.$Proxy237.evalSha(Unknown Source) 
at org.springframework.data.redis.core.script.DefaultScriptExecutor.eval(DefaultScriptExecutor.java:81) 
at org.springframework.data.redis.core.script.DefaultScriptExecutor$1.doInRedis(DefaultScriptExecutor.java:71) 
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:207) 
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:169) 
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:157) 
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:60) 
at org.springframework.data.redis.core.script.DefaultScriptExecutor.execute(DefaultScriptExecutor.java:54) 
at org.springframework.data.redis.core.RedisTemplate.execute(RedisTemplate.java:300) 

答えて

1

スイッチクラスタ環境でEVALSHAを使用するには、レタスドライバへ。

@Bean 
LettuceConnectionFactory redisConnectionFactory(RedisProperties redisProperties) { 

    Cluster clusterProperties = redisProperties.getCluster(); 
    RedisClusterConfiguration config = new RedisClusterConfiguration(
      clusterProperties.getNodes()); 

    if (clusterProperties.getMaxRedirects() != null) { 
     config.setMaxRedirects(clusterProperties.getMaxRedirects()); 
    } 

    return new LettuceConnectionFactory(config); 
} 
+0

ありがとう:

春ブート1.5.xのための構成は次のようになります。あなたはレタスを使用して春のブートの例がありますか? –

+0

答えを更新しました。 – mp911de

+0

多くの感謝!それはうまくいく。 –

関連する問題