From 4cb2fda57541947b5ff743a911ca9414f1c7a514 Mon Sep 17 00:00:00 2001 From: xyc <jc_xiong@hotmail.com> Date: 星期一, 28 十月 2024 15:41:17 +0800 Subject: [PATCH] 新增凌晨3点清理redis过期key功能(key7天有效) --- starter/src/main/java/com/zt/life/StartupHandler.java | 14 +++++++ starter/src/main/java/com/zt/task/PurgeDataTask.java | 52 ++++++++++++++++++++++++++ starter/src/main/java/com/zt/life/AdminApplication.java | 20 ++++------ 3 files changed, 74 insertions(+), 12 deletions(-) diff --git a/starter/src/main/java/com/zt/life/AdminApplication.java b/starter/src/main/java/com/zt/life/AdminApplication.java index 7ed8ad2..7dfdcac 100644 --- a/starter/src/main/java/com/zt/life/AdminApplication.java +++ b/starter/src/main/java/com/zt/life/AdminApplication.java @@ -19,10 +19,9 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.annotation.EnableScheduling; import java.io.File; -import java.text.ParseException; /** * @author hehz @@ -34,6 +33,7 @@ org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class}) @EnableCaching @EnableAsync +@EnableScheduling public class AdminApplication extends SpringBootServletInitializer { @Value("${zt.oss.local-path}") @@ -59,12 +59,12 @@ return factory; } - @Scheduled(cron = "0 0 3 * * ?") //姣忓ぉ3鐐规墽琛� - public void timerListener() throws ParseException { -/* projectService.dropTemporaryTable(); - projectService.updateHasLifeData(); - this.deleteTempFile();*/ - } +// @Scheduled(cron = "0 0 3 * * ?") //姣忓ぉ3鐐规墽琛� +// public void timerListener() throws ParseException { +///* projectService.dropTemporaryTable(); +// projectService.updateHasLifeData(); +// this.deleteTempFile();*/ +// } private void deleteTempFile() { String tempUploadDir = localPath + File.separator + "TEMP_UPLOAD"; @@ -78,10 +78,6 @@ @Bean public RedisTemplate<String, Object> redisTemplate() { - try { - this.timerListener(); - } catch (Exception e) { - } RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); // 鏆傛椂鍏堣缃甼ey鍜寁alue鐨勫簭鍒楀寲閮芥槸瀛楃涓� redisTemplate.setKeySerializer(new StringRedisSerializer()); diff --git a/starter/src/main/java/com/zt/life/StartupHandler.java b/starter/src/main/java/com/zt/life/StartupHandler.java new file mode 100644 index 0000000..7d62798 --- /dev/null +++ b/starter/src/main/java/com/zt/life/StartupHandler.java @@ -0,0 +1,14 @@ +package com.zt.life; + +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +@Component +public class StartupHandler implements ApplicationRunner { + + @Override + public void run(ApplicationArguments args) throws Exception { + // 鍒锋柊缂撳瓨 + } +} diff --git a/starter/src/main/java/com/zt/task/PurgeDataTask.java b/starter/src/main/java/com/zt/task/PurgeDataTask.java new file mode 100644 index 0000000..1f5dee8 --- /dev/null +++ b/starter/src/main/java/com/zt/task/PurgeDataTask.java @@ -0,0 +1,52 @@ +package com.zt.task; + +import com.zt.common.utils.CommonUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.Cursor; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ScanOptions; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.Date; +import java.util.concurrent.TimeUnit; + + +@Component +public class PurgeDataTask { + private static final Logger logger = LoggerFactory.getLogger(PurgeDataTask.class); + + @Autowired + private RedisTemplate redisTemplate; + + + @Scheduled(cron = "0 0 3 * * ?") //姣忓ぉ3鐐规墽琛� + public void task() { + logger.info("娓呯悊鏁版嵁task寮�濮�"); + Date beginDate = new Date(); + + purgeRedis(); + + logger.info("娓呯悊鏁版嵁task鑰楁椂:" + CommonUtils.getDatePoor(new Date(), beginDate)); + logger.info("娓呯悊鏁版嵁task缁撴潫"); + } + + private void purgeRedis() { + Cursor<byte[]> cursor = (Cursor<byte[]>) redisTemplate.executeWithStickyConnection( + (RedisCallback<Cursor<byte[]>>) connection -> connection.scan(ScanOptions.NONE) + ); + while (cursor.hasNext()) { + String key = new String(cursor.next()); + System.out.println(key); + Long ttl = redisTemplate.getExpire(key); + if (ttl == -1) { + redisTemplate.expire(key, 7*24*3600, TimeUnit.SECONDS); + System.out.println("set key["+key+"] expire 7 days"); + } + } + } + +} \ No newline at end of file -- Gitblit v1.9.1