skyouc
2024-12-21 c635d78b479510ebe2556a420948effcd30a0731
zy-asrs-wms/src/main/java/com/zy/asrs/wms/asrs/timer/CacheStatisticsTimer.java
@@ -1,72 +1,72 @@
package com.zy.asrs.wms.asrs.timer;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.wms.asrs.entity.CacheStatistics;
import com.zy.asrs.wms.asrs.service.CacheStatisticsService;
import com.zy.asrs.wms.common.constant.RedisConstants;
import com.zy.asrs.wms.common.domain.CacheHitDto;
import com.zy.asrs.wms.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
@Component
public class CacheStatisticsTimer {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private CacheStatisticsService cacheStatisticsService;
    /**
     * 将缓存统计保存至数据库
     * 每30分钟扫描一次
     */
    @Scheduled(cron = "0 30 * * * ? ")
    public void run() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String now = format.format(new Date());
        Set<String> keys = redisUtil.searchRedisKeys(RedisConstants.STATISTICS_CACHE_DATA);
        for (String key : keys) {
            if(key.contains(now)){
                continue;
            }
            try {
                String[] split = key.split(":");
                String ymd = split[1];
                String cacheKey = split[2];
                Object object = redisUtil.get(key);
                if(object == null){
                    continue;
                }
                CacheHitDto cacheHitDto = JSON.parseObject(object.toString(), CacheHitDto.class);
                CacheStatistics cacheStatistics = cacheStatisticsService.getOne(new LambdaQueryWrapper<CacheStatistics>().eq(CacheStatistics::getYmd, ymd).eq(CacheStatistics::getCacheKey, cacheKey));
                if (cacheStatistics == null) {
                    cacheStatistics = new CacheStatistics();
                    cacheStatistics.setYmd(ymd);
                    cacheStatistics.setCacheKey(cacheKey);
                    cacheStatistics.setHit(0);
                    cacheStatistics.setMiss(0);
                    cacheStatisticsService.save(cacheStatistics);
                }
                cacheStatistics.setHit(cacheStatistics.getHit() + cacheHitDto.getHit());
                cacheStatistics.setMiss(cacheStatistics.getMiss() + cacheHitDto.getMiss());
                cacheStatisticsService.updateById(cacheStatistics);
                redisUtil.del(key);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
package com.zy.asrs.wms.asrs.timer;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.zy.asrs.wms.asrs.entity.CacheStatistics;
import com.zy.asrs.wms.asrs.service.CacheStatisticsService;
import com.zy.asrs.wms.common.constant.RedisConstants;
import com.zy.asrs.wms.common.domain.CacheHitDto;
import com.zy.asrs.wms.utils.RedisUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;
@Component
public class CacheStatisticsTimer {
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private CacheStatisticsService cacheStatisticsService;
    /**
     * 将缓存统计保存至数据库
     * 每30分钟扫描一次
     */
//    @Scheduled(cron = "0 30 * * * ? ")
    public void run() {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String now = format.format(new Date());
        Set<String> keys = redisUtil.searchRedisKeys(RedisConstants.STATISTICS_CACHE_DATA);
        for (String key : keys) {
            if(key.contains(now)){
                continue;
            }
            try {
                String[] split = key.split(":");
                String ymd = split[1];
                String cacheKey = split[2];
                Object object = redisUtil.get(key);
                if(object == null){
                    continue;
                }
                CacheHitDto cacheHitDto = JSON.parseObject(object.toString(), CacheHitDto.class);
                CacheStatistics cacheStatistics = cacheStatisticsService.getOne(new LambdaQueryWrapper<CacheStatistics>().eq(CacheStatistics::getYmd, ymd).eq(CacheStatistics::getCacheKey, cacheKey));
                if (cacheStatistics == null) {
                    cacheStatistics = new CacheStatistics();
                    cacheStatistics.setYmd(ymd);
                    cacheStatistics.setCacheKey(cacheKey);
                    cacheStatistics.setHit(0);
                    cacheStatistics.setMiss(0);
                    cacheStatisticsService.save(cacheStatistics);
                }
                cacheStatistics.setHit(cacheStatistics.getHit() + cacheHitDto.getHit());
                cacheStatistics.setMiss(cacheStatistics.getMiss() + cacheHitDto.getMiss());
                cacheStatisticsService.updateById(cacheStatistics);
                redisUtil.del(key);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}