ECS-CMD/YuNan-system-start/src/main/java/com/yunan/service/RedisExpireTask.java

44 lines
1.5 KiB
Java
Raw Normal View History

2024-11-09 16:49:13 +08:00
package com.yunan.service;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import java.util.Set;
import java.util.stream.Collectors;
@Service
public class RedisExpireTask {
2024-11-10 21:09:44 +08:00
private final long time = 3600000; //一小时
2024-11-09 16:49:13 +08:00
private RedisTemplate<String, Object> redisTemplate;
public RedisExpireTask(RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
// 每隔一分钟执行一次
@Scheduled(fixedRate = time)
public void removeExpiredKeys() {
long now = System.currentTimeMillis();
// 获取过期的 hashKey
Set<Object> expiredHashKeys = redisTemplate.opsForZSet().rangeByScore("rightCode:expire", 0, now);
if (expiredHashKeys != null && !expiredHashKeys.isEmpty()) {
// 将 Set<Object> 转换为 Set<String>
Set<String> expiredHashKeysSet = expiredHashKeys.stream()
.map(Object::toString) // 将 Object 转换为 String
.collect(Collectors.toSet());
// 删除过期的数据
redisTemplate.opsForZSet().remove("rightCode:expire", expiredHashKeysSet.toArray(new String[0]));
// 同时从哈希表中删除对应的 hashKey
for (String hashKey : expiredHashKeysSet) {
redisTemplate.opsForHash().delete("rightCode", hashKey);
}
}
}
}