redis缓存使用案例

【1125】PH-UCP数据库CPU使用率达到100%
1 问题描述(事件描述,影响,时长)
11月25日,PH-UCP数据库CPU使用率达到100%整理如下:
13:50   收到运维通知数据库CUP使用率达到100%,观察单证合成正常;
2 问题分析(问题代码或者问题架构定位)
背景:目前的设计,PH-UCP的单证模板缓存任务,是在同一时间,多台服务器上发起数据库分页查询,对数据库CPU造成持续冲高。
3 问题处理(如何处理解决的)
优化单证模板缓存任务,实现错峰访问数据库,并减少数据库访问频率,从而降低对数据库CPU的冲击。
4 问题展开(如何预防避免、是否要排查类似问题、好的建议等等)
预防避免措施如下:
日常排查服务器及数据库指标,如有异常及时排查
批量并发访问数据时,尽量实现错峰访问

private void syncUcpDocCache() {
        JedisCluster jedisCluster = RedisUtil.getJedisCluster();

        String publicedCount = jedisCluster.get(RedisKeyConstants.REDIS_KEY_UCP_DOC_PUBLICED_COUNT);
        LOGGER.info("PH-UCP-CORE开始加载缓存,isExe:{},ucpInfoEnable:{},newModeFlag:{},"+RedisKeyConstants.REDIS_KEY_UCP_DOC_PUBLICED_COUNT+
                ":{} >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",isExe, ucpInfoEnable, newModeFlag, publicedCount);
        int time = (20*12*delayTime/1000)-10;
        if(isExe && (ucpInfoEnable|| isPubliced(publicedCount))){
            long count = RedisUtil.getJedisCluster().incr(PH_UCP_DOC_EXE_COUNT);
            LOGGER.info("单证缓存初始count值:{}",count);
            try {
                if(count == 1){
                    jedisCluster.expire(PH_UCP_DOC_EXE_COUNT,time);
                }
                Thread.sleep(count*delayTime);
                iUcpDocVerCacheService.sync();
            } catch (Exception e) {
                LOGGER.error(DictConstants.EXCEPTION_MSG, e);
                jedisCluster.set(PH_UCP_DOC_PUBLICED_DEAL_FLAG,"F");
                jedisCluster.expire(PH_UCP_DOC_PUBLICED_DEAL_FLAG,time);

            }finally {
                //JedisCluster jedisCluster = RedisUtil.getJedisCluster();
                long count = jedisCluster.decr(PH_UCP_DOC_EXE_COUNT);
                LOGGER.info("单证缓存最终count值:{}",count);
                if(count == 0){
                    if(StringUtils.isEmpty(jedisCluster.get(PH_UCP_DOC_PUBLICED_DEAL_FLAG))){
                        long pubCount = RedisUtil.getJedisCluster().decr(RedisKeyConstants.REDIS_KEY_UCP_DOC_PUBLICED_COUNT);
                        if(pubCount<0){
                            jedisCluster.del(RedisKeyConstants.REDIS_KEY_UCP_DOC_PUBLICED_COUNT);
                        }
                    }else {
                        jedisCluster.del(PH_UCP_DOC_PUBLICED_DEAL_FLAG);
                    }
                }else if(count < 0 ){
                    jedisCluster.del(PH_UCP_DOC_EXE_COUNT);
                }else{
                    LOGGER.info("还有机器单证缓存未处理完");
                }
            }
        }
        LOGGER.info("PH-UCP-CORE结束加载缓存>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

    }

你可能感兴趣的:(Redis,缓存,redis,数据库)