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 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().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(); } } } }