Hi!
I'm using a master/replica scheme with "read from replica" client property enabled.
var masterReplicaConfiguration = new RedisStaticMasterReplicaConfiguration(masterNode.getHost(), masterNode.getPort());
redisProperties
.getReplicas()
.forEach(
replica -> {
RedisNode node = RedisNode.fromString(replica.getHost());
masterReplicaConfiguration.addNode(node.getHost(), node.getPort());
});
LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigBuilder =
LettuceClientConfiguration.builder().readFrom(ReadFrom.REPLICA_PREFERRED);
And I've tried to use custom distributed lock implementation, which is based on Redis scripts, like
private static final String LOCK_SCRIPT = "return redis.call('SET', KEYS[1], ARGV[1], 'PX', tonumber(ARGV[2]), 'NX') and true or false";
@Override
protected String acquire(final String key, final String storeId, final String token, final long expiration) {
final List<String> singletonKeyList = Collections.singletonList(storeId + ":" + key);
final boolean locked = stringRedisTemplate.execute(lockScript, singletonKeyList, token, String.valueOf(expiration));
...
}
It seems that "execute" is treated as a read operation by default, so it throws:
Caused by: <#029e4a23> org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisReadOnlyException: READONLY You can't write against a read only replica. script: 15df23044ffd4f2723d9689555be4a5cccac4154, on @user_script:1.
at o.s.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
Is it possible to expose any options when calling RedisTemplate.execute to flag the operation as READ_WRITE, such as with Redissons RScript.Mode?
Hi!
I'm using a master/replica scheme with "read from replica" client property enabled.
And I've tried to use custom distributed lock implementation, which is based on Redis scripts, like
It seems that "execute" is treated as a read operation by default, so it throws:
Is it possible to expose any options when calling RedisTemplate.execute to flag the operation as READ_WRITE, such as with Redissons RScript.Mode?