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

  • 相关阅读:
    1.27
    1.25
    Representation Learning with Contrastive Predictive Coding
    Learning a Similarity Metric Discriminatively, with Application to Face Verification
    噪声对比估计(负样本采样)
    Certified Adversarial Robustness via Randomized Smoothing
    Certified Robustness to Adversarial Examples with Differential Privacy
    Dynamic Routing Between Capsules
    Defending Adversarial Attacks by Correcting logits
    Visualizing Data using t-SNE
  • 原文地址:https://www.cnblogs.com/paxing/p/redis.html
Copyright © 2011-2022 走看看