• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 知识库 知识库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

2022年01月13日发布springredis注解实现缓存机制

武飞扬头像
xhjyxxw
帮助14

知行礼动

大家好,今日小科来聊聊一篇关于2022年01月13日整理发布:关于springredis注解实现缓存机制的文章,现在让我们往下看看吧!

on2JsonRedisSerializer"/> </property> <!--开启事务 --> <property name="enableTransactionSupport" value="false"></property> </bean> <!-- 配置RedisCacheManager --> <bean class="org.springframework.data.redis.cache.RedisCacheManager"> <constructor-arg name="redisOperations" ref="redisTemplateTax" /> </bean> <cache:annotation-driven cache-manager="redisCacheManager"/>

2、缓存注解@Cacheable、@CacheEvict、@CachePut详解一、@Cacheable用法详解1、用在哪里用在方法或者类上。2、这两种用法有什么区别 用在方法上表示:该方法的返回值将被缓存起来  用在类上表示:表示该类的所有方法都支持该注解3、使用后的结果是什么下次使用相同方法和相同参数调用这个方法的时候将直接从缓存取值而不需要再次执行该方法。4、返回值在缓存中怎么存储的以键值对的方式存储在缓存中value就是返回值key由两种策略生成:默认策略和自定义策略5、默认策略和默认策略怎么用  默认策略:在value值后双“::”拼接形参列表当形参是对象时使用json格式:

@CacheConfig(cacheNames="enterprise")//<!-- 声明缓存使用的缓存名称 -->public interface EnterpriseRepo extends JpaRepository<Enterprise, Integer>,JpaSpecificationExecutor<Enterprise>{ @Cacheable(value="cash1") Enterprise findByid(Integer id); @CachePut(value="cash1") Enterprise save(Enterprise enterprise);}

  自定义策略:key属性是用来指定Spring缓存方法的返回结果时对应的key的。该属性支持SpringEL表达式。当我们没有指定该属性时Spring将使用默认策略生成key。

自定义策略是指我们可以通过Spring的EL表达式来指定我们的key。这里的EL表达式可以使用方法参数及它们对应的属性。使用方法参数时我们可以直接使用“#参数名”或者“#p参数index”。下面是几个使用参数作为key的示例。

@Cacheable(value="users", key="#id") public User find(Integer id) { return null; } @Cacheable(value="users", key="#p0") public User find(Integer id) { return null; } @Cacheable(value="users", key="#user.id") public User find(User user) { return null; } @Cacheable(value="users", key="#p0.id") public User find(User user) { return null; }

  除了上述使用方法参数作为key之外Spring还为我们提供了一个root对象可以用来生成key。通过该root对象我们可以获取到以下信息。

当我们要使用root对象的属性作为key时我们也可以将“#root”省略因为Spring默认使用的就是root对象的属性。如:

@Cacheable(value={"users", "xxx"}, key="caches[1].name")public User find(User user) { return null;}

6、condition属性指定发生的条件

有的时候我们可能并不希望缓存一个方法所有的返回结果。通过condition属性可以实现这一功能。condition属性默认为空表示将缓存所有的调用情形。其值是通过SpringEL表达式来指定的当为true时表示进行缓存处理;当为false时表示不进行缓存处理即每次调用该方法时该方法都会执行一次。如下示例表示只有当user的id为偶数时才会进行缓存。

@Cacheable(value={"users"}, key="#user.id", condition="#user.id%2==0")public User find(User user) { System.out.println("find user by user " user); return user;}

二、@CachePut

在支持Spring Cache的环境下对于使用@Cacheable标注的方法Spring在每次执行前都会检查Cache中是否存在相同key的缓存元素如果存在就不再执行该方法而是直接从缓存中获取结果进行返回否则才会执行并将返回结果存入指定的缓存中。@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果而是每次都会执行该方法并将执行结果以键值对的形式存入指定的缓存中。 一般使用在保存更新方法中。

@CachePut也可以标注在类上和方法上。使用@CachePut时我们可以指定的属性跟@Cacheable是一样的。

@CachePut(“users”)//每次都会执行方法并将结果存入指定的缓存中

public User find(Integer id) { return null;}

三、@CacheEvict

@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。@CacheEvict可以指定的属性有value、key、condition、allEntries和beforeInvocation。其中value、key和condition的语义与@Cacheable对应的属性类似。即value表示清除操作是发生在哪些Cache上的(对应Cache的名称);key表示需要清除的是哪个key如未指定则会使用默认策略生成的key;condition表示清除操作发生的条件。下面我们来介绍一下新出现的两个属性allEntries和beforeInvocation。1、 allEntries属性allEntries是boolean类型表示是否需要清除缓存中的所有元素。默认为false表示不需要。当指定了allEntries为true时Spring Cache将忽略指定的key。有的时候我们需要Cache一下清除所有的元素这比一个一个清除元素更有效率。

@CacheEvict(value="users", allEntries=true)public void delete(Integer id) { System.out.println("delete user by id: " id);}

2、beforeInvocation属性 清除操作默认是在对应方法成功执行之后触发的即方法如果因为抛出异常而未能成功返回时也不会触发清除操作。使用beforeInvocation可以改变触发清除操作的时间当我们指定该属性值为true时Spring会在调用该方法之前清除缓存中的指定元素。

@CacheEvict(value="users", beforeInvocation=true)public void delete(Integer id) { System.out.println("delete user by id: " id);}

这篇好文章是转载于:知行礼动

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 知行礼动
  • 本文地址: /news/detail/tanhbggbih