栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring Redis错误处理

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring Redis错误处理

我有同样的问题。我正在通过Spring
Caching注释将Redis用作缓存存储区,从而针对数据库开发一些数据服务。如果Redis服务器不可用,我希望这些服务能够像未缓存一样继续运行,而不是抛出异常。

最初,我尝试了一个自定义的CacheErrorHandler,这是Spring提供的一种机制。它并不是很有效,因为它只处理RuntimeExceptions,并且仍然让java.net.ConnectException之类的东西炸毁。

最后,我所做的是扩展RedisTemplate,覆盖了一些execute()方法,以便它们记录警告而不是传播异常。似乎有点hack,我可能重写了太少的execute()方法或太多了,但是在我所有的测试用例中,它都像一个魅力。

但是,此方法有一个重要的操作方面。如果Redis服务器不可用,则必须刷新它(清除条目),然后才能再次使用它。否则,由于同时发生更新,您可能会开始检索数据不正确的缓存条目。

以下是来源。随意使用它。希望对您有所帮助。

import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.data.redis.core.RedisCallback;import org.springframework.data.redis.core.RedisTemplate;import org.springframework.data.redis.core.SessionCallback;import org.springframework.data.redis.core.script.Redisscript;import org.springframework.data.redis.serializer.RedisSerializer;public class LoggingRedisTemplate<K, V> extends RedisTemplate<K, V> {    private static final Logger logger = LoggerFactory.getLogger(LoggingRedisTemplate.class);    @Override    public <T> T execute(final RedisCallback<T> action, final boolean exposeConnection, final boolean pipeline) {        try { return super.execute(action, exposeConnection, pipeline);        }        catch(final Throwable t) { logger.warn("Error executing cache operation: {}", t.getMessage()); return null;        }    }    @Override    public <T> T execute(final Redisscript<T> script, final List<K> keys, final Object... args) {        try { return super.execute(script, keys, args);        }        catch(final Throwable t) { logger.warn("Error executing cache operation: {}", t.getMessage()); return null;        }    }    @Override    public <T> T execute(final Redisscript<T> script, final RedisSerializer<?> argsSerializer, final RedisSerializer<T> resultSerializer, final List<K> keys, final Object... args) {        try { return super.execute(script, argsSerializer, resultSerializer, keys, args);        }        catch(final Throwable t) { logger.warn("Error executing cache operation: {}", t.getMessage()); return null;        }    }    @Override    public <T> T execute(final SessionCallback<T> session) {        try { return super.execute(session);        }        catch(final Throwable t) { logger.warn("Error executing cache operation: {}", t.getMessage()); return null;        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401378.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号