Cache基础

Cache概念

不同层级对应的缓存技术选型

系统层级缓存层级使用技术
Web浏览器缓存、代理服务器缓存、网关缓存HTTP头信息控制、代理服务器或CDN、反向代理或间接代理
应用层单机缓存、分布式缓存JVM或者服务器内存、Ehcache、Redis
数据层ORM缓存Hibernate、JPA的一级、二级缓存

缓存命中率:

  1. 命中率=从缓存中读取数据的次数与总的读取数据的次数的比值
  2. 过期策略
      FIFO、LRU(最久未使用)、LFU(最近最少使用)、TTL(存活期)、TTI(空闲期)

使用Spring Cache的优点:

  1. 支持开箱即用(Out-Of-The-Box)并提供基本的Cache,方便切换各种底层缓存抽象
  2. 类似于Spring提供的数据库事物管理,通过Cache注解即可实现缓存逻辑透明化,让开发者关注业务逻辑
  3. 事务回滚时,缓存也会回滚
  4. 支持比较复杂的缓存逻辑
  5. 提供缓存编程的一致性抽象,方便代码维护

注意:Spring Cache不针对多线程的应用环境进行专门处理,在分布式或者集群环境下需要针对具体的缓存进行相应的配置。


Spring Cache

  1. Java 的缓存和序列化是息息相关的,需要缓存的实体一般需要实现Serializable接口,对EhCache、Redis等套件来说能缓存的实体应该可序列化
  2. 缓存定义:确定需要缓存的方法和缓存策略
  3. 缓存配置:配置缓存

缓存注解

  1. @Cacheable:
    (1)指定被注解的方法返回值是可被缓存的
    (2)工作原理:Spring先在缓存中查找数据,如果没有则执行方法。缓存名时必须提供的,可以用列表提供多个cache各个名字之间用“,”隔开,用花括号括起来。
    例如:@Cacheable(value={“cache1”.”cache2”,”cache3”})
  2. 本质:键值对的集合
  3. 参数说明示例
    value/cacheNames缓存的名字,在Spring配置文件定义,必须至少有一个@Cacheable(cacheNames=”cache1”)
    key缓存的key。可以为空,如果指定,必须按spEl表达式编写,不指定则按照方法的所以参数进行组合@Cacheable(key=”#userName”,value=”cache1”)
    condition缓存的条件,可以为空,使用spEl表达式返回true 或false 只有返回true才缓存,unless与condition相反@Cacheable(cacheNames={“cache1”,”cache2”},condition=”userName.length()>2”)
  4. @CachePut
    使用该注解来更新缓存
  5. @CacheEvict
    从给定的缓存中移除一个值
    (1)allEbtries属性:是否移除所以缓存 @CacheEvict(value=”cache1”,allEntries=true/false)
    (2)beforeInvocation属性:默认清除缓存方法是在方法执行后触发,默认为false 设置为true则在方法执行前触发
  6. @Caching:
    类级别的缓存
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值