关于spring redis注解实现缓存机制


下面由redis教程栏目给大家介绍关于spring redis注解实现缓存机制,希望对需要的朋友有所帮助!

1、xml配置

 <bean id="poolConfigTax" class="redis.clients.jedis.JedisPoolConfig">  
        <property name="maxIdle" value="${redis_tax.maxIdle}" />  
        <property name="minIdle" value="${redis_tax.minIdle}" />  
        <property name="maxTotal" value="${redis_tax.maxTotal}" />
        <property name="testOnBorrow" value="${redis_tax.testOnBorrow}" />  
    </bean>  
    <!-- Tax redis 数据库  -->
    <bean id="connectionFactoryTax" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"   
        p:host-name="${redis_tax.host}" p:port="${redis_tax.port}" p:password="${redis_tax.pass}"  p:pool-config-ref="poolConfigTax"
        p:database="0"/>  
    <!--redis操作模版,使用该对象可以操作redis  -->  
    <bean id="redisTemplateTax" class="org.springframework.data.redis.core.RedisTemplate" >    
        <property name="connectionFactory" ref="connectionFactoryTax" />    
        <!--如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!!  -->    
        <property name="keySerializer" >    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />    
        </property>    
        <property name="valueSerializer" >    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer" />    
        </property>    
        <property name="hashKeySerializer">    
            <bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>    
        </property>    
        <property name="hashValueSerializer">    
            <bean class="org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer"/>    
        </property>    
        <!--开启事务  -->  
        <property name="enableTransactionSupport" value="false"></property>  
    </bean>   
    <!-- 配置RedisCacheManager -->
    <bean id="redisCacheManager" 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 s*e(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为偶数时才会进行缓存。

SONIFY.io SONIFY.io

设计和开发音频优先的产品和数据驱动的解决方案

SONIFY.io 83 查看详情 SONIFY.io
@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);
}

以上就是关于spring redis注解实现缓存机制的详细内容,更多请关注其它相关文章!


# 是否存在  # 小红书推广入口官方网站  # 成都抖音营销推广机构  # 北关区网站推广外包服务  # 澳门seo网站优化  # 无忧摄影网站建设  # 砂锅店营销推广策略怎么写  # 网站推广哪家公司效果好  # 品牌自动营销推广怎么做  # 可以免费注册的推广网站  # 余杭网站推广平台  # spring  # 键值  # 报错  # 返回值  # 当我们  # 的是  # 自定义  # 并将  # 我们可以  # 用在  # redis 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: mysql镜像配置如何恢复数据_mysql镜像配置数据恢复详细流程  LocoySpider如何批量采集电商商品_LocoySpider电商采集的模板应用  《友玩*》创建群聊方法  抖音作品被限流怎么办 抖音内容优化与流量恢复方法  VS Code快捷键when上下文子句的妙用  c++类和对象到底是什么_c++面向对象编程基础  PSD转AI文件的简单方法  苹果电脑如何快速查看电池状态 苹果电脑电池信息快捷方法  如何自定义苹果手机铃声  GBA模拟器手柄按键设置  睡觉时心跳快是什么原因 夜间心悸如何应对  圆通快递官方入口不需要登录 在线查询入口快速查询  Composer如何使用composer-plugin-api开发自定义插件  智学网app怎么登录忘记密码_智学网app忘记密码找回与重新登录操作方法  小红书如何引流到私信?引流到私信有用吗?  C++怎么实现一个红黑树_C++高级数据结构与平衡二叉搜索树  百度浏览器无法安装扩展程序_百度浏览器插件安装失败原因解析  word怎么将图片设置为页面背景并不影响打印_Word图片背景设置方法  SQLAlchemy 2.0 与 Pydantic 模型类型安全集成指南  搜狗浏览器如何查找页面中的文字 搜狗浏览器Ctrl+F页面搜索功能  CSS绝对定位与溢出控制:实现背景元素局部显示不触发滚动条  使用Python和NLTK从文本中高效提取名词的实用教程  VS Code源代码管理(SCM)视图的进阶使用技巧  盲鳗善于分泌黏液猜猜主要用来做什么  申通快递物流信息查询 申通快递包裹状态追踪  追剧达人如何发弹幕  蜻蜓FM如何设置移动流量播放  Excel宏怎么删除_Excel中删除宏的详细操作流程  汽车之家网页版免费登录_汽车之家官网首页直接进入  在Flask应用中安全高效地更新SQLAlchemy用户数据  《土豆雅思》修改密码方法  《海豚家》注销账号方法  网站体验不好=浪费钱:如何提升-用户体验效果差  管理打开的编辑器:固定、分组和关闭技巧  Vue 3中独立响应式实例的创建与应用  包子漫画官网链接官方地址 包子漫画在线观看官网首页入口  如何配置VS Code作为您Git操作的默认编辑器  mysql怎么查询数据_mysql基础查询语句使用教程  win11讲述人怎么关闭 Win11屏幕朗读辅助功能禁用方法【技巧】  纯CSS实现滚动时动态时间轴线条颜色填充效果  电子白板帮助菜单使用指南  macosmonterey系统外接显示器驱动怎么安装_macosmonterey外接显示器驱动与分辨率调整  稻壳阅读器官方直达网址链接 稻壳阅读器文档阅读平台主页资源入口  抖音号升级成企业资质怎么弄?有什么好处?  AffinityDesigner图层蒙版怎么用_AffinityDesigner图层蒙版设计应用  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  《波斯王子:失落的王冠》剑术大师打法攻略  mysql如何配置从库只读_mysql从库只读设置方法  餐馆菜篮选购指南  从HTML表单获取逗号分隔值并转换为NumPy数组进行预测 

 2020-11-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.