微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在服务器强制停止的情况下,如何防止 redis 丢失数据,从而导致 RedisCommandInterruptedException

如何解决在服务器强制停止的情况下,如何防止 redis 丢失数据,从而导致 RedisCommandInterruptedException

@Autowired
    private StringRedistemplate stringRedistemplate; 

public List<Object> getDataFromredis(String redisKey) {
        
            try {
                
                long numberOfEntriesToRead = 60000;
                return stringRedistemplate.executePipelined(
                        (RedisConnection connection) -> {
                            StringRedisConnection stringRedisConn =(StringRedisConnection)connection;
                            for (int index = 0; index < numberOfEntriesToRead; index++) {
                                stringRedisConn.lPop(redisKey);
                            }
                            return null;
                        });
            }catch (RedisCommandInterruptedException e) {
                LOGGER.error("Interrupted EXCEPTION :::",e);
            }
        } 
    }

我有一个方法可以读取给定密钥的 redis 内容。现在的问题是,当我的应用程序服务器停止而此方法试图从 redis 获取数据时,我收到 RedisCommandInterruptedException 异常,导致从 redis 丢失一些数据。那么我该如何克服这个问题任何建议都是可观的。

解决方法

管道不是原子操作,因此无法保证在发生异常时执行所有/全部命令。

您可以使用 lua 脚本或 multi command 在单个事务中进行运行操作。 您可以在此 SO thread 和此 site 中阅读有关在 Spring Boot Data redis 中使用 multi 的更多信息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。