@EnableCaching @Cacheable @CachePut redis注解缓存

这篇具有很好参考价值的文章主要介绍了@EnableCaching @Cacheable @CachePut redis注解缓存。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。如果你使用了这个注解,那么你就不需要在XML文件中配置cache manager了。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理。文章来源地址https://www.toymoban.com/news/detail-547875.html

@EnableCaching
@Configuration
public class RedisConfig {

    /**
     * @Cacheable注解不支持配置过期时间,所有需要通过配置CacheManneg来配置默认的过期时间和针对每个类或者是方法进行缓存失效时间配置。
     * @param redisConnectionFactory
     * @return
     */
    @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("wxcl", this.getRedisCacheConfigurationWithTtl(60*60*24*7));
        //redisCacheConfigurationMap.put("UserInfoListAnother", this.getRedisCacheConfigurationWithTtl(18000));
        return redisCacheConfigurationMap;
    }

    private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
        StringRedisSerializer keyStringRedisSerializer = new StringRedisSerializer();
        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));
        redisCacheConfiguration.serializeKeysWith(
                RedisSerializationContext
                        .SerializationPair
                        .fromSerializer(keyStringRedisSerializer)
        );

        return redisCacheConfiguration;
    }

}
@Slf4j
@Service("myUserCacheService")
public class MyUserCacheService {

    /**
     * sso登录用户获取当前用户
     * @param token token
     * @param user  获取默认null
     */
    @Cacheable(
            value = "iotgw",
            key = "'user'+#token",
            unless = "#result eq null")
    public Map<String, String> getUserFromRedis(String token, Map<String, String> user) {
        log.info("从缓存中获取sso登录人信息失败 {},准备写入缓存", user);
        return user;
    }

    /**
     * 获取企业信息
     * @param token   存储关键值
     * @param company 企业信息
     */
    @Cacheable(
            value = "devicecenter",
            key = "'company'+#token",
            unless = "#result eq null")
    public Map<String, String> getCompanyFromRedis(String token, Map<String, String> company) {
        log.info("从缓存中获取登录人信息失败 {},准备写入缓存", company);
        return company;
    }

    /**
     * 企业信息缓存变更
     * @param token   存储关键值
     * @param company 企业信息
     */
    @CachePut(
            value = "devicecenter",
            key = "'company'+#token",
            unless = "#result eq null")
    public Map<String, String> setCompanyFromRedis(String token, Map<String, String> company) {
        log.info("从缓存中获取登录人信息失败 {},准备写入缓存", company);
        return company;
    }

    /**
     * 后台登录用户获取当前用户
     */
    @Cacheable(
            value = "iotmgw",
            key = "'user'+#userId",
            unless = "#result eq null")
    public Map<String, String> getManagerUserFromRedis(String userId, Map<String, String> user) {
        log.info("从缓存中获取后台登录人信息失败 {},准备写入缓存", user);
        return user;
    }

}

到了这里,关于@EnableCaching @Cacheable @CachePut redis注解缓存的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • @Cacheable 注解(指定缓存位置)

    1、缓存使用步骤:@Cacheable这个注解,用它就是为了使用缓存的。所以我们可以先说一下缓存的使用步骤: 1、开启基于注解的缓存,使用 @EnableCaching 标识在 SpringBoot 的主启动类上。 2、标注缓存注解即可  使用  @Cacheable  注解就可以将运行结果缓存,以后查询相同的数据,

    2024年02月07日
    浏览(51)
  • SpringBoot的Cacheable缓存注解

    当我们的应用程序需要频繁地读取和写入数据时,为了提高应用程序的性能,我们通常会使用缓存技术。Spring Boot 提供了一种简单而强大的缓存框架,它可以轻松地将数据缓存到 Redis 中。 在 Spring Boot 中可以在方法上简单的加上注解实现缓存。 首先,您需要在您的项目中添加

    2024年02月10日
    浏览(42)
  • SpringBoot通过@Cacheable注解实现缓存功能

    Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107) 注解简化我们的开发。 其使用方法和原理都类似于 Spring 对事务管理的支持,Spring Cache 是作用在方法上的,其核

    2024年02月10日
    浏览(39)
  • Spring 中的 @Cacheable 缓存注解,太好用了!

    第一个问题,首先要搞明白什么是缓存,缓存的意义是什么。 对于普通业务,如果要查询一个数据,一般直接select数据库进行查找。但是在高流量的情况下,直接查找数据库就会成为性能的瓶颈。因为数据库查找的流程是先要从磁盘拿到数据,再刷新到内存,再返回数据。磁

    2024年02月16日
    浏览(38)
  • SpringBoot缓存注解@Cacheable之自定义key策略及缓存失效时间指定

    1. 项目依赖 本项目借助 SpringBoot 2.2.1.RELEASE  +  maven 3.5.3  +  IDEA  +  redis5.0 进行开发 开一个 web 服务用于测试 1. key 生成策略 对于 @Cacheable 注解,有两个参数用于组装缓存的 key cacheNames/value: 类似于缓存前缀 key: SpEL 表达式,通常根据传参来生成最终的缓存 key 默认的 redisK

    2024年02月19日
    浏览(39)
  • redis(12):springboot使用redis注解做缓存

    1 新建springboot项目   2 相关注解 @EnableCaching 在启动类上加上注解启动缓存 #作用在你要缓存的数据上 @Cacheable(key=\\\"#id\\\",cacheNames=\\\"com.sxt.service.impl.MenuServiceImpl\\\") @Cacheput 解决脏读 @CachEvict(解决脏读) @Cacheconfig(全局的配置缓存) 3 修改yml

    2024年02月15日
    浏览(44)
  • Spring Boot 中的 @Cacheable 注解

    在 Spring Boot 中,缓存是一个非常重要的话题。当我们需要频繁读取一些数据时,为了提高性能,可以将这些数据缓存起来,避免每次都从数据库中读取。为了实现缓存,Spring Boot 提供了一些缓存注解,其中最常用的是 @Cacheable 注解。 @Cacheable 注解用于标记一个方法需要被缓存

    2024年02月12日
    浏览(59)
  • 一文掌握SpringBoot注解之@Cacheable 知识文集(1)

    🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论⭐收藏 🔎 SpringBoot 领域知识 🔎 链接 专栏 SpringBoot 专业知识学习一 SpringBoot专栏 Sprin

    2024年01月20日
    浏览(44)
  • SpringBoot 缓存之 @Cacheable 详细介绍

    1、缓存介绍 Spring 从 3.1 开始就引入了对 Cache 的支持。定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术。并支持使用 JCache(JSR-107)注解简化我们的开发。 其使用方法和原理都类似于 Spring 对事务管理的支持。Spring Cache 是作用在方

    2024年04月27日
    浏览(35)
  • 转载 spring @Cacheable扩展实现缓存自动过期时间以及自动刷新

    用过spring cache的朋友应该会知道,Spring Cache默认是不支持在@Cacheable上添加过期时间的,虽然可以通过配置缓存容器时统一指定。形如 复制 但有时候我们会更习惯通过注解指定过期时间。今天我们就来聊一下如何扩展@Cacheable实现缓存自动过期以及缓存即将到期自动刷新 2 实现

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包