zoukankan      html  css  js  c++  java
  • 使用@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

  • 相关阅读:
    计蒜客 奇怪的国家
    计蒜客 泥塑课
    计蒜客 判断质数
    hiho #1143 : 骨牌覆盖问题·一 (运用快速幂矩阵)
    二叉树建立,先序、中序、后序遍历(c实现)
    hiho #1272 买零食 [Offer收割]编程练习赛2
    hiho #1283 hiho密码 [Offer收割]编程练习赛3
    hiho #1288 微软2016.4校招笔试题 Font Size
    hiho一下 第九十八周 搜索一·24点
    hiho一下 第九十七周 数论六·模线性方程组
  • 原文地址:https://www.cnblogs.com/paxing/p/redis.html
Copyright © 2011-2022 走看看