Spring cache 注解 @Cacheable 整合 Redis 实现缓存 TTL 过期

简介: Spring cache 注解 @Cacheable 整合 Redis 实现缓存 TTL 过期
+关注继续查看

Spring cache @Cacheable 注解 自身并不是支持缓存过期,

@Configuration
@EnableCaching
public class EruptRedisConfig implements Serializable {

    /**
     * 功能描述: 自定义 RedisCacheManager
     *
     * @param: redisConnectionFactory
     * @date: 2021/4/12 11:10
     */
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        return new RedisCacheManager(
                RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
                /**
                 * 系统默认值五分钟,单位 秒
                 */
                this.getRedisCacheConfigurationWithTtl(5 * 60),
                this.getRedisCacheConfigurationMap()
        );
    }

    /**
     * 功能描述: 配置自定义cache过期时间
     *
     * @date: 2021/4/12 11:12
     */
    private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {

        Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
        /**
         * 缓存token解析的用户信息,默认失效时间五分钟
         */
        redisCacheConfigurationMap.put("cache_erupt_user", this.getRedisCacheConfigurationWithTtl(5 * 60));
        /**
         * TODO
         * 其他方法如需缓存以此类推,@Cacheable(value = "cache_user", key = "#token")
         * put(cache_user,expireTime)
         */
        return redisCacheConfigurationMap;
    }

    /**
     * 功能描述: RedisCache 序列化设置
     *
     * @param: seconds 单位 秒
     * @date: 2021/4/12 11:10
     */
    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;
    }
}

使用实例

  @Cacheable(value = "cache_erupt_user", key = "#token")
    public EruptUser createOrGetEruptUser(String token) {
  }

整理了几百本各类技术电子书,有需要的同学可以,关注公号回复 [ 666 ] 自取。还有想要加技术群的同学可以加我好友,和大佬侃技术、不定期内推,程序员的内点事这都有。

在这里插入图片描述

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
1天前
|
缓存 NoSQL 关系型数据库
如何实现Redis缓存和MySQL数据的一致性
如何实现Redis缓存和MySQL数据的一致性
|
4天前
|
缓存 NoSQL Java
Java实现redis缓存效果变量过期
Java实现redis缓存效果变量过期
20 0
|
6天前
|
canal 缓存 关系型数据库
Canal解决Redis与mysql缓存一致性问题
Canal解决Redis与mysql缓存一致性问题
15 0
|
6天前
|
缓存 NoSQL 应用服务中间件
基于Redis和Nginx实现高并发缓存架构
基于Redis和Nginx实现高并发缓存架构
14 0
|
6天前
|
缓存 NoSQL 关系型数据库
课时3:通过缓存来加速数据库访问(MySQL+Redis)
课时3:通过缓存来加速数据库访问(MySQL+Redis)
32 0
|
14天前
|
缓存 NoSQL 关系型数据库
Redis缓存与Mysql数据库的一致性问题解决
Redis缓存与Mysql数据库的一致性问题解决
28 0
|
14天前
|
缓存 NoSQL 中间件
太卷了!京东、微博最新「Redis缓存高手心法手册」竟被开源了
众所周知,分布式架构被广泛应用于企业级应用开发中,以满足高并发、高可用、高性能、高扩展性等要求。 像电商平台秒杀、平台抢票等高并发场景,数据访问量激增,容易造成服务器负载过重从而导致崩溃。因此,分布式缓存作为分布式架构的重要组件,当一个缓存服务节点挂掉,可以马上切换到另外的缓存服务节点,以保证系统能正常运行。
19 0
|
27天前
|
缓存 NoSQL 应用服务中间件
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
|
1月前
|
缓存 NoSQL 关系型数据库
Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库
Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库
147 0
|
1月前
|
缓存 NoSQL 算法
LRU算法与Caffeine、Redis中的缓存淘汰策略详解与比较
在实际应用中,我们需要考虑数据访问模式、内存限制以及性能需求等因素来选择最合适的缓存淘汰策略。通过深入了解LRU算法及其在不同缓存库中的应用,我们可以更好地优化我们的应用程序的性能。
66 1
推荐文章
更多