• 使用@Cacheable注解时,Redis连不上,直接调用方法内部的解决方案


    最近redis 域名一致解析错误,导致业务多了很多异常。那么如何在这种情况下直接访问数据库,而不是报错呢

    1. 解决方案

    其实很简单,在配置 redis 时,只需要多一项配置,继承 CachingConfigurerSupport ,然后重写其 errorHandler 方法即可,代码如下:

    /**
         * 如果cache出错, 我们会记录在日志里,方便排查,比如反序列化异常
         */
        @Override
        public CacheErrorHandler errorHandler() {
            return new LoggingCacheErrorHandler();
        }
    
    static class LoggingCacheErrorHandler extends SimpleCacheErrorHandler {
    
            private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
            @Override
            public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCacheGetError(exception, cache, key);  不抛出错误,记录日志
            }
    
            @Override
            public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCachePutError(exception, cache, key, value);不抛出错误,记录日志
            }
    
            @Override
            public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCacheEvictError(exception, cache, key);不抛出错误,记录日志
            }
    
            @Override
            public void handleCacheClearError(RuntimeException exception, Cache cache) {
                logger.error(String.format("cacheName:%s", cache == null ? "unknown" : cache.getName()), exception);
    //            super.handleCacheClearError(exception, cache);不抛出错误,记录日志
            }
        }
    

    只要处理时不抛出错误,就会继续走下去,然后调用原方法体内。

    注意:错误仅仅打日志会让我们忽略,而异常我们是可以看得到的。所以,这种错误还是需要被感知,也就是需要给开发者发邮件通知,然后针对去处理

    2. 参考

    https://blog.csdn.net/l1028386804/article/details/82597154

  • 相关阅读:
    Ubuntu 14.04 下 Chromium 出现 未安装Adobe Flash Player 问题解决
    UESTC 764 失落的圣诞节 --RMQ/线段树
    TopCoder SRM 639 Div.2 500 AliceGameEasy --乱搞
    HDU 4578 Transformation --线段树,好题
    linux下发布操作
    Memcached 安装部署手册
    Java中集中常见的数据结构(转自CSDN,整理编写)
    oracle数据库2种临时表的使用
    weblogic服务部署
    springboot入门学习(一)
  • 原文地址:https://www.cnblogs.com/paxing/p/redis.html
Copyright © 2020-2023  润新知