@Cacheable 设置缓存过期时间

2023-11-18

RedisCacheConfig 文件

@Configuration
public class RedisCacheConfig {

	/**
	* 自定义的缓存key的生成策略 若想使用这个key
	* 只需要讲注解上keyGenerator的值设置为simpleKeyGenerator即可
	**/
    @Bean
    public KeyGenerator simpleKeyGenerator() {
        return (o, method, objects) -> {
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(o.getClass().getSimpleName());
            stringBuilder.append(".");
            stringBuilder.append(method.getName());
            stringBuilder.append("[");
            for (Object obj : objects) {
                stringBuilder.append(obj.toString());
            }
            stringBuilder.append("]");

            return stringBuilder.toString();
        };
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        return new RedisCacheManager(
            RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
            this.getRedisCacheConfigurationWithTtl(600), // 默认策略,未配置的 key 会使用这个
            this.getRedisCacheConfigurationMap() // 指定 key 策略
        );
    }


    private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
        Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
        redisCacheConfigurationMap.put("UserInfoList", this.getRedisCacheConfigurationWithTtl(3000));
        redisCacheConfigurationMap.put("UserInfoListAnother", this.getRedisCacheConfigurationWithTtl(18000));

        return redisCacheConfigurationMap;
    }

    private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);

        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
            RedisSerializationContext
                .SerializationPair
                .fromSerializer(jackson2JsonRedisSerializer)
        ).entryTtl(Duration.ofSeconds(seconds));
		
        return redisCacheConfiguration;
    }
}

要指定 key 的过期时间,只要在getRedisCacheConfigurationMap方法中添加就可以。 然后只需要
@Cacheable 就可以把数据存入 redis

@Cacheable(value = "UserInfoList", keyGenerator = "simpleKeyGenerator") // 3000秒
@Cacheable(value = "UserInfoListAnother", keyGenerator = "simpleKeyGenerator") // 18000秒
@Cacheable(value = "DefaultKeyTest", keyGenerator = "simpleKeyGenerator") // 600秒,未指定的key,使用默认策略

补充:

根据个人情况选择使用哪种单位设置过期时间

.entryTtl(Duration.ofSeconds(seconds))设置时使用单位为秒
.entryTtl(Duration.ofMinutes(minutes));设置时使用单位为分钟
.entryTtl(Duration.ofHours(hours));设置时使用单位为小时
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

@Cacheable 设置缓存过期时间 的相关文章

  • Redis多插入问题

    我尝试多次插入 但它给了我错误 http pastie org 7337421 http pastie org 7337421 cat mass insert txt 3 r n 3 r nSET r n 3 r nkey r n 5 r
  • Node.js 上通过套接字连接 Redis

    由于共享托管 目标主机上的我的 redis 服务器不在端口上运行 而是在非常特定的套接字上运行 可以通过套接字文件连接到该套接字 只有我的用户可以访问 但是 我还没有找到如何通过套接字指定连接node redis and connect r
  • Stackexchange.redis 缺乏“WAIT”支持

    我在客户端应用程序正在使用的负载均衡器后面有 3 个 Web API 服务器 我正在使用这个库来访问具有一个主服务器和几个从服务器的 Redis 集群 目前不支持 WAIT 操作 我需要此功能来存储新创建的用户会话并等待它复制到所有从属服务
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 如何在节点redis客户端上设置读取超时?

    在 github 上我没有看到读取超时的选项 https github com NodeRedis node redis https github com NodeRedis node redis There s connect timeo
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • redis-cli 重定向到 127.0.0.1

    我在PC1上启动Redis集群 然后在PC2上连接它 当需要重定向到另一个集群节点时 它会显示Redirected to slot 7785 located at 127 0 0 1 但应该显示Redirected to slot 7785
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 通过 StackExchange.Redis 连接到 Redis Servier

    我尝试使用以下方法制作一个测试项目Redis https redis io服务器 通过 Virtual Box 安装在 Linux Ubuntu 虚拟机上 Linux 机器通过 Virtual Box 的桥接适配器与本地网络连接 Virtu
  • 在 sidekiq 上配置 redis 身份验证

    我想我错过了一些东西 因为我在文档中找不到如何编写 redis 实例的用户名和密码以与 sidekiq 一起使用 有没有办法做到这一点 或者是通过 ENV 变量 Sidekiq 将无法识别的 Redis 选项直接传递给 Redis 驱动程序
  • SignalR 无法连接到 SSL 上的 Azure Redis

    我目前在 Azure 上托管我的 redis 缓存服务器 并让 signalR 依赖它作为骨干 使用以下内容 GlobalHost DependencyResolver UseRedis 服务器 端口 密码 eventKey 这可以在端口
  • 如何在Redis中进行持久化存储?

    关闭redis服务器后 使用set存储的值被破坏 在这里我找到了使用持久性存储的方法 有人帮助我 如何使用javascript实现这一点 我想将客户端的一些值存储在 redis 数据库中 并且必须在其他客户端中使用该值 您需要配置 Redi
  • 如何在Redis中从hmset()切换到hset()?

    我收到弃用警告 即 Redis hmset 已弃用 请改用 Redis hset 但是 hset 采用第三个参数 我不知道是什么name应该是 info users 10 timestamp datetime utcnow strftime
  • Redis Cluster 与 Pub/Sub 中的 ZeroMQ,用于水平扩展的分布式系统

    如果我要设计一个巨大的分布式系统 其吞吐量应随系统中的订阅者数量和通道数量线性扩展 哪个会更好 1 Redis集群 仅适用于Redis 3 0 alpha 如果是集群模式 您可以在一个节点上发布并在另一个完全不同的节点上订阅 消息将传播并到
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • 在 Redis 上为 Django 和 Express.js 应用程序共享会话存储

    我想创建一个包含一些登录用户的 Django 应用程序 另一方面 由于我想要一些实时功能 所以我想使用 Express js 应用程序 现在的问题是 我不希望身份不明的用户访问 Express js 应用程序的日期 因此 我必须在 Expr

随机推荐

  • r语言写九九乘法表并保存为txt文件

    r语言写九九乘法表并保存为txt文件 代码 for i in 1 9 for j in 1 i cat j x i i j t file 九九乘法表 txt append TRUE cat n file 九九乘法表 txt append T
  • Nacos-Server用户权限控制无效解决方案

    场景 nacos server默认账户是 nacos nacos 此用户权限太大 有时候为了安全起见会建立多个用户 给予不同的角色权限 但建立用户后发现权限不起作用 分析 nacos默认不开启权限控制 如果想使用权限控制功能 需要在 con
  • etp服务器怎么连接共享文件夹,Everything共享文件操作方法

    以前我们要想共享一些文件给朋友 最常见的方法就是通过网盘来完成 但是这样的共享并不是朋友们都喜欢的 其实利用著名的搜索工具Everything 我们就可以在电脑中划出一部分区域 从而快速搭建一个用于分享的服务器平台 这样我们可以将自己发现的
  • visual studio code怎么用root/sudo调试远程程序?

    vs code是款微软出品不错的编辑器 可以远程编辑 处理服务器上的文件 支持c php python java等各种语言 在调试c 程序 的时候遇到了一个问题 编辑代码是用的普通用户 但调试的时候需要用root启动 如果启动调试出现要求密
  • Python 安装模块后找不到模块以及Python代码自动补全设置的一个思路

    起因是在做一些小玩意时安装了一些模块 但是运行时却找不到模块 于是多次重装VScode里边的Python部分 导致VScode自动补全也被玩掉了 查了很久的才终于搞回来 先把找到的一个有用链接放这 免得找不到了如何使用Visual Stud
  • 使用labelme打标签,详细教程

    做图像语义分割 打标签时需要用到labelme这个工具 我总结了它的详细使用教程 目录 一 安装labelme工具 二 文件位置关系 三 labelme工具 四 labelme工具的快捷键 五 代码 将标签文件转为统一固定格式 六 总结 一
  • Jdk8 之 Stream流详细用法(一)

    本篇文章参考云深i不知处的文章 原文链接 https blog csdn net mu wind article details 109516995 一 概述 Stream 是 Java8 中处理集合的关键抽象概念 它可以指定你希望对集合进
  • 21.5 CSS 网页布局方式

    网页布局方式 网页布局方式 是指浏览器对网页中的元素进行排版的方法 常见的网页布局方式包括 1 标准流 文档流 普通流 布局 这是浏览器默认的排版方式 元素按照其在文档中的位置依次排列 可以使用CSS的盒模型属性进行水平和垂直布局 2 浮动
  • ipad投屏软件_无线投屏操作指南 轻松分享

    下发福利 智能会议的无线投屏 支持Windows Mac OS ios Android 一键投屏 随时批注 能够满足一分四屏 灵活进行大小屏互控 帮助企业突破 线 制 以下内容为无线投屏的操作指南 01 Windows 与 Mac OS系统
  • OOMMF手册整理

    如果您得系统Tcl Tk安装就是非线程得 那么您可以创建一个非线程版本得OOMMF 否则您可以在您得主目录或 usr local下创建一个额外得 线程化得Tcl Tk安装 请注意 如果您得系统上安装了多个Tcl Tk安装 则无论何时您构建或
  • Springboot未注入的类使用Spring容器的实体类,实体类又需要插入yml的数据,实体类属于Spring容器。

    Springboot中Bean的注入 我们都知道 Springboot可以使用方法级别注解 Bean 和类级别注解 Controller Component Service等 加包扫描的方式注入Beans 实现交给Spring容器管理 这样
  • R各个包里面的数据集列表

    Package Item Title csv doc datasets AirPassengers Monthly Airline Passenger Numbers 1949 1960 CSV DOC datasets BJsales S
  • STM32串口中断接收方式详细比较

    本例程通过PC机的串口调试助手将数据发送至STM32 接收数据后将所接收的数据又发送至PC机 具体下面详谈 实例一 void USART1 IRQHandler u8 GetData u8 BackData if USART GetITSt
  • stata--异方差检验

    异方差检验有两种方法 1 残差图 2 white检验 1 残差图 一般不用这个 这个只是粗略 代码 reg y fdi rvfplot yline 0 rvpplot fdi yline 0 1 对y和fdi回归 2 画出残差与拟合值 y
  • Doc2Vec的简介及应用(gensim)

    作者 Gidi Shperber 在本文中 你将学习什么是doc2vec 它是如何构建的 它与word2vec有什么关系 你能用它做什么 并且没有复杂的数学公式 介绍 文本文档的量化表示在机器学习中是一项具有挑战性的任务 很多应用都需要将文
  • ajax实现文件上传

    没有使用插件 一 单文件上传
  • linux 命令:zip 详解

    zip 命令的功能是打包和压缩文件 用法 zip options b path t mmddyyyy n suffixes zipfile list xi list 如果 zipfile 未提供 压缩标准输入并把结果写到标准输出 选项 A
  • svn项目的拉取和提交

    svn项目的拉取和提交 如何拉取svn项目到本地 方法一 1 新建一个空的svn目录文件夹 然后直接在桌面空白处鼠标右击 点击Svn Checkout 弹出一个框 URL of repository就是该项目得svn地址 Checkout
  • R语言的Rattle可视化BI数据挖掘分析工具

    Rattle介绍 Rattle是一个免费的开源数据挖掘工具包 使用 Gnome 图形界面以统计语言 R编写 它在GNU Linux Macintosh OS X和MS Windows下运行 Rattle正在澳大利亚和国际上用于商业 政府 研
  • @Cacheable 设置缓存过期时间

    RedisCacheConfig 文件 Configuration public class RedisCacheConfig 自定义的缓存key的生成策略 若想使用这个key 只需要讲注解上keyGenerator的值设置为simpleK