拾光记录
218个文档 导航 作者 Gitee
随笔记录4
Hexo博客:基础使用Hexo博客:Next主题Hexo博客:Next进阶使用Hexo博客:Next高级配置
前端知识4
基础知识17
Vue框架19
UniApp14
微信小程序1
Java编程6
Java基础15
SpringBoot31
SpringMVC18
MyBatis9
SpringCloud15
中间件2
数据库4
MySQL13
Redis8
MongoDB10
其他数据库1
Python编程6
Python基础知识Python语法yolo目标检测OpenCV的使用及树莓派平台condauv管理工具
Linux12
Linux常用命令Jar启动脚本VirtualBox安装CentOSVirtualBox安装Ubuntu树莓派安装及使用frp内网穿透ArchLinux:基础系统安装ArchLInux:图形化界面安装ArchLinux:常用软件ArchLinux:深度优化ArchLinux:NiriArchLinux:模块记录
软件工具12
IDEAGitMavenGradleNginx安装Nginx配置JMeter压测OllamaRustFSPicGoVSCodeDocker
创意设计2
Blender:入门知识UI设计基础知识
AI相关9
Claude CodeHermes AgentOpenAI基本使用OpenAI工具调用OpenAI记忆管理OpenAI推理执行OpenAI开发框架Langchainllama.cpp

代码

支持自动续期

import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import java.util.Objects;
import java.util.concurrent.TimeUnit;

/**
 * 滑动过期时间
 */
@Slf4j
@Component
public class RedisSlidingExpirationUtil {

    @Resource
    private RedisTemplate<String, String> redisTemplate;

    /**
     * 获取值并自动续期(滑动过期)
     *
     * @param key     Redis键
     * @param timeout 过期时长
     * @param unit    时间单位
     * @return 对应的值,如果key不存在返回null
     */
    public String getAndRefresh(String key, long timeout, TimeUnit unit) {
        // 1. 先获取值
        String value = redisTemplate.opsForValue().get(key);
        // 2. 如果值存在,则刷新过期时间
        if (Objects.nonNull(value)) {
            Boolean success = redisTemplate.expire(key, timeout, unit);
            if (!success) {
                // 可选:记录日志,说明续期失败(可能key刚被删除)
                log.error("Redis续期失败: {}", key);
            }
        }
        return value;
    }

    /**
     * 设置值并初始化过期时间
     */
    public void setWithSlidingExpire(String key, String value, long timeout, TimeUnit unit) {
        redisTemplate.opsForValue().set(key, value, timeout, unit);
    }

}
代码