瀏覽代碼

add redis util

zero 1 年之前
父節點
當前提交
828e7596da

+ 11 - 0
src/main/java/com/example/xiaoshiweixinback/business/redis/RedisService.java

@@ -2,6 +2,7 @@
 package com.example.xiaoshiweixinback.business.redis;
 
 
+import com.example.xiaoshiweixinback.business.utils.DateUtil;
 import jakarta.annotation.Resource;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.support.atomic.RedisAtomicLong;
@@ -452,6 +453,16 @@ public class RedisService {
     }
 
 
+    /**
+     * 设置key值在下一天零点过期
+     * @param key
+     */
+    public void removeKeyBySecond(String key) {
+        Long second = DateUtil.getRemainingSecond();
+        if (second <= 0) {
+            this.delete(key);
+        }
+    }
 }
 
 

+ 29 - 0
src/main/java/com/example/xiaoshiweixinback/business/utils/DateUtil.java

@@ -24,10 +24,15 @@ import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 public class DateUtil {
 
@@ -392,5 +397,29 @@ public class DateUtil {
 		System.out.println(getAfterDayWeek("3"));
 	}
 
+	public static Long getRemainingSecond() {
+		// 获取当前时间
+		LocalDateTime now = LocalDateTime.now();
+
+		// 计算当天零点的时间
+		LocalDateTime midnight = now.plusDays(1).truncatedTo(ChronoUnit.DAYS);
+
+		// 转换为ZonedDateTime以获取时区信息
+		ZonedDateTime zonedDateTime = midnight.atZone(ZoneId.systemDefault());
+
+		// 转换为Unix时间戳(秒)
+		long midnightTimestamp = TimeUnit.MILLISECONDS.toSeconds(zonedDateTime.toInstant().toEpochMilli());
+
+		// 获取当前时间的Unix时间戳(秒)
+		long currentTimestamp = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
+
+		// 计算剩余秒数直到当天零点
+
+//		// 如果已经过了零点,则设置过期时间为0或者重新计算逻辑
+//		if (ttlSeconds <= 0) {
+//			ttlSeconds = 0; // 或者你可以设置为其他逻辑,比如下一个天的零点
+//		}
+		return midnightTimestamp - currentTimestamp;
+	}
 }
 

+ 26 - 4
src/test/java/com/example/xiaoshiweixinback/XiaoshiWeixinbackApplicationTests.java

@@ -8,11 +8,15 @@ import org.springframework.context.annotation.Lazy;
 
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.Arrays;
 import java.util.Calendar;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 
 @SpringBootTest
@@ -71,9 +75,27 @@ class XiaoshiWeixinbackApplicationTests {
 
     @Test
     public void test1() {
-        List<String> list = Arrays.asList("A", "B", "C");
-        List<String> list1 = Arrays.asList("a", "C", "D", "F");
-        list.removeAll(list1);
-        System.out.println(list);
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        System.out.println(now);
+        // 计算当天零点的时间
+        LocalDateTime midnight = now.plusDays(1).truncatedTo(ChronoUnit.DAYS);
+
+        // 转换为ZonedDateTime以获取时区信息
+        ZonedDateTime zonedDateTime = midnight.atZone(ZoneId.systemDefault());
+
+        // 转换为Unix时间戳(秒)
+        long midnightTimestamp = TimeUnit.MILLISECONDS.toSeconds(zonedDateTime.toInstant().toEpochMilli());
+        System.out.println(midnightTimestamp);
+        // 获取当前时间的Unix时间戳(秒)
+        long currentTimestamp = TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
+        System.out.println(currentTimestamp);
+        // 计算剩余秒数直到当天零点
+        long ttlSeconds = midnightTimestamp - currentTimestamp;
+        System.out.println(ttlSeconds);
+        // 如果已经过了零点,则设置过期时间为0或者重新计算逻辑
+        if (ttlSeconds <= 0) {
+            ttlSeconds = 0; // 或者你可以设置为其他逻辑,比如下一个天的零点
+        }
     }
 }