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 { private final long time = 3600000; //一小时 private RedisTemplate redisTemplate; public RedisExpireTask(RedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } // 每隔一分钟执行一次 @Scheduled(fixedRate = time) public void removeExpiredKeys() { long now = System.currentTimeMillis(); // 获取过期的 hashKey Set expiredHashKeys = redisTemplate.opsForZSet().rangeByScore("rightCode:expire", 0, now); if (expiredHashKeys != null && !expiredHashKeys.isEmpty()) { // 将 Set 转换为 Set Set 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); } } } }