Skip to content

lua 脚本执行错误 can't write against a read only replica. #3042

@zhanghongwang

Description

@zhanghongwang

spring-data-redis-2.7.14
redis集群版本 5.0

# config
 @Bean
    public LettuceConnectionFactory lettuceConnectionFactory() {
        RedisClusterConfiguration redisClusterConfiguration = new RedisClusterConfiguration(redisProperties.getCluster().getNodes());
        redisClusterConfiguration.setMaxRedirects(3);

        //支持自适应集群拓扑刷新和静态刷新源
        ClusterTopologyRefreshOptions clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
                .enablePeriodicRefresh()
                .enableAllAdaptiveRefreshTriggers()
                .refreshPeriod(Duration.ofSeconds(5))
                .build();

        ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()
                .topologyRefreshOptions(clusterTopologyRefreshOptions).build();

        //从优先,读写分离,读从可能存在不一致,最终一致性CP
        LettuceClientConfiguration lettuceClientConfiguration = LettuceClientConfiguration.builder()
                .readFrom(ReadFrom.SLAVE_PREFERRED)
                .clientOptions(clusterClientOptions).build();
        
        return new LettuceConnectionFactory(redisClusterConfiguration,lettuceClientConfiguration);
    }
    
        private final RedisTemplate<String, Object> redisTemplate;
    
        String REDIS_LIST_LPOP = "local key = KEYS[1]\n" +
            "local count = tonumber(ARGV[1])\n" +
            "local values = redis.call('LRANGE', key, 0, count - 1)\n" +
            "redis.call('LTRIM', key, count, -1)\n" +
            "return values\n";
    
     DefaultRedisScript<List> redisScriptForLPOP= new DefaultRedisScript<>();
        redisScriptForLPOP.setScriptText(REDIS_LIST_LPOP);
        redisScriptForLPOP.setResultType(List.class);
        
             List execute = redisTemplate.execute(redisScriptForLPOP, Collections.singletonList(key), count);
        
       
    
    
    

error
@user_script: 4: -READONLY You can't write against a read only replica.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions