`
wx1569020408
  • 浏览: 26843 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Spring Boot集成cache

 
阅读更多

缓存简介

工作机制是:先从缓存中读取数据,如果没有再从慢速设备上读取实际数据(数据也会存入缓存);缓存什么:那些经常读取且不经常修改的数据/那些昂贵(CPU/IO)的且对于相同的请求有相同的计算结果的数据。例如Maven/京东物流都是这种思想

缓存命中率

即从缓存中读取数据的次数 与 总读取次数的比率,命中率越高越好:

命中率 = 从缓存中读取次数 / (总读取次数[从缓存中读取次数 + 从慢速设备上读取的次数])

缓存策略

Eviction policy 移除策略,即如果缓存满了,从缓存中移除数据的策略;常见的有LFU、LRU、FIFO:

FIFO(First In First Out):先进先出算法,即先放入缓存的先被移除;

LRU(Least Recently Used):最久未使用算法,使用时间距离现在最久的那个被移除;

LFU(Least Frequently Used):最近最少使用算法,一定时间段内使用次数(频率)最少的那个被移除;

TTL(Time To Live )存活期,即从缓存中创建时间点开始直到它到期的一个时间段(不管在这个时间段内有没有访问都将过期)

TTI(Time To Idle)空闲期,即一个数据多久没被访问将从缓存中移除的时间。

spring定义了org.springframework.cache.CacheManager和org.springframework.cache.Cache接口来统一不同的缓存技术,而SpringBoot为我们提供了自动配置多个CacheManager的实现

EhCacheCacheConfiguration.class EhCache实现缓存

GuavaCacheConfiguration.class Guava实现缓存

JCacheCacheConfiguration.class JCache实现缓存

GenericCacheConfiguration.class Collection实现缓存

SimpleCacheConfiguration.class ConcurrentMap实现缓存

在不做任何额外配置的情况下,默认使用SimpleCacheConfiguration,即ConcurrentMapCacheManager。Springboot支持以“spring.cache”为前缀的属性来配置,如:

spring.cache.type=#ehcache,generic,redis,jcache等

spring.cache.cache-names=#缓存名称

spring.cache.ehcache.config= #ehcache配置文件地址

在Spring Boot中通过@EnableCaching注解自动化配置合适的缓存管理器(CacheManager),Spring Boot根据下面的顺序去侦测缓存提供者:

Generic

JCache (JSR-107)

EhCache 2.x

Hazelcast

Infinispan

Redis

Guava

Simple

除了按顺序侦测外,我们也可以通过配置属性spring.cache.type来强制指定。我们可以通过debug调试查看cacheManager对象的实例来判断当前使用了什么缓存。

默认的ConcurrentMapCacheManager使用步骤:

1. 引入pom.xml

org.springframework.boot

spring-boot-starter-cache

2. 在主类或configuration类中通过 @EnableCaching 开启缓存

3. @Cacheable 查询,首先检查缓存是否存在,如果有则直接从缓存取然后返回,若没有则查DB,并将结果(有值或空)添加数据到缓存中。缓存名称为people,缓存key为person的id属性

参数:

value、cacheNames:两个等同的参数(cacheNames为Spring 4新增,作为value的别名),用于指定缓存存储的集合名。由于Spring 4中新增了@CacheConfig,因此在Spring 3中原本必须有的value属性,也成为非必需项了

key:缓存对象存储在Map集合中的key值,非必需,缺省按照函数的所有参数组合作为key值,若自己配置需使用SpEL表达式,比如:@Cacheable(key = "#p0"):使用函数第一个参数作为缓存的key值,更多关于SpEL表达式的详细内容可参考官方文档

condition:缓存对象的条件,非必需,也需使用SpEL表达式,只有满足表达式条件的内容才会被缓存,默认缓存所有结果数据。比如:@Cacheable(key = "#p0", condition = "#p0.length() < 3"),表示只有当第一个参数的长度小于3的时候才会被缓存,若做此配置上面的AAA用户就不会被缓存。

4. @CachePut 插入或更新到DB后,检查缓存中是否有该key,有则更新,没有则新增。新增或更新的内容为接口的返回值,所以保存/更新接口必须有返回值。 若返回值为空,则缓存也会为空值。

参数:同上

5. @CacheEvict 表示从缓存people中删除key为id的数据

参数:除上述之外,还有2个。

allEntries:非必需,默认为false。当为true时,会移除所有数据

beforeInvocation:非必需,默认为false,会在调用方法之后移除数据。当为true时,会在调用方法之前移除数据。

ehcache使用步骤:

1. pom.xml引入依赖:

net.sf.ehcache

ehcache

2.8.3

2. 在src/main/resources目录下创建:ehcache.xml

xsi:noNamespaceSchemaLocation="ehcache.xsd">

maxEntriesLocalHeap="200"

timeToLiveSeconds="600">

或配置

spring.cache.type=ehcache

spring.cache.ehcache.config=classpath:config/another-config.xml

redis使用步骤:

1. pom.xml引入依赖:

org.springframework.boot

spring-boot-starter-redis

2. properties中配置redis端口等

3. 配置RedisCacheManager,RedisTemplate的bean,具体参考源码

综合说明:

1. spring cache是spring3.1就有的概念,通过AOP实现,提供注解方式,但由于是进程内的缓存,适合于单机,分布式环境下不适用。EhCache提供了集群环境下的缓存同步策略,但是同步依然需要一定的时间,短暂的缓存不一致依然存在。在一些要求高一致性(任何数据变化都能及时的被查询到)的系统和应用中,就不能再使用EhCache来解决了,这个时候使用集中式缓存是个不错的选择

2. redis是集中式缓存,通过上述注解方式使用redisCacheManager,则缓存数据存储在redis,保证分布式环境数据一致性。

实例源码: test1-cache

转载于:https://my.oschina.net/superwind20/blog/1524134

分享到:
评论

相关推荐

    Spring Boot集成Spring Cache过程详解

    Spring Boot集成Spring Cache过程详解 Spring Boot集成Spring Cache是指使用Spring Boot框架集成Spring Cache来实现缓存机制,从而提高应用程序的性能和效率。Spring Cache是Spring框架中的一个组件,提供了统一的...

    spring-boot-cache.rar

    在这个名为 "spring-boot-cache.rar" 的压缩包中,我们很可能是找到了一个基于 Spring Boot 的小型项目,它展示了如何在 Spring Boot 应用中集成和使用缓存功能。下面我们将详细探讨 Spring Boot 缓存的相关知识点。...

    从零开始学Spring Boot

    1.40 Spring Boot集成EHCache实现缓存机制 1.41 Spring Boot分布式Session状态保存Redis 1.42 Spring Boot Shiro权限管理 1.43 Spring Boot Shiro权限管理 1.44 Spring Boot Shiro权限管理 1.45 Spring Boot Shiro...

    Spring Boot 学习笔记完整教程.pdf

    - **Spring Cache**:Spring 框架中的缓存抽象,Spring Boot 提供了自动配置的支持。 - **集成 EHCache**:EHCache 是一个广泛使用的开源缓存,Spring Boot 可以集成 EHCache。 #### 5. 分布式 Session 共享 Spring...

    springBoot集成redis

    本文将详细介绍如何在Spring Boot项目中集成Redis和MyBatis,以实现数据缓存和数据库操作。 首先,为了在Spring Boot项目中引入Redis,我们需要在`pom.xml`文件中添加Spring Data Redis依赖: ```xml &lt;groupId&gt;...

    37. Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot集成EHCache来实现高效的缓存机制。Spring Boot简化了配置过程,使得我们可以快速地将EHCache引入到我们的应用中,从而提高应用程序的性能,减少对数据库或其他资源的...

    spring boot 所有‘demo,打包下载’

    3. **Cache 支持**: Spring Boot 提供了对缓存的支持,可以集成 Ehcache、Hazelcast 或 Redis 等缓存系统。通过简单的注解,可以在方法级别启用缓存,提高应用程序性能。 4. **Ant**: Ant 是 Apache 软件基金会的一...

    spring boot 实践学习案例,与其它组件整合

    - Spring Boot 缓存,包括redis、ehcache、spring-cache、memcached、使用redis实现session共享 等。 - springboot-templates - Spring Boot 模板,包括thymeleaf、freemarker、jsp、表单校验 等。 - ...

    spring boot+Vue全栈开发实战

    6. **Chapter 12**: 可能讲解了Spring Boot的缓存管理,如何使用Spring Cache抽象来实现本地缓存(如EhCache)或分布式缓存(如Redis)。 7. **Chapter 14**: 可能是关于Spring Boot的微服务架构,如何使用Spring ...

    spring boot+spring cache实现两级缓存(redis+caffeine)

    Spring Boot中集成了Spring Cache,并有多种缓存方式的实现,如:Redis、Caffeine、JCache、EhCache等等。如果只用一种缓存,要么会有较大的网络消耗(如Redis),要么就是内存占用太大(如Caffeine这种应用内存缓存...

    spring boot集成redis做为通用缓存的实战demo,帮助大家彻底掌握s-cache-practice.zip

    在本实战项目 "s-cache-practice" 中,我们将学习如何将 Redis 集成到 Spring Boot 应用中,以实现通用缓存功能。 首先,让我们了解集成的步骤: 1. **添加依赖**:在 `pom.xml` 文件中,我们需要引入 Spring Boot...

    Spring-Boot-Example:Spring Boot集成演示(jpa,rest,cache,redis,ehcache,log4j2,mybatis,jms,mq ...)

    Spring-Boot-Example ...3. spring-boot-cache-simple 不使用第三方缓存技术,ConcurrentMapCacheManager,默认使用 ConcurrentHashMap作为存储缓存 4. spring-boot-cache-ehcache2 添加 ehcache2 依赖和 ehcache.

    spring boot+shiro 权限认证管理案例

    通过以上步骤,我们可以构建一个集成了 Spring Boot 和 Shiro 的权限认证管理系统,能够实现用户登录、权限校验、会话管理等功能,同时利用缓存提升系统性能。在实际开发中,还可以根据需求扩展 Shiro 功能,例如...

    redis与springcache集成

    在Spring Boot应用中,集成Redis作为缓存机制,可以极大地提高应用程序的性能,减少对数据库的访问。 首先,集成Redis和Spring Cache需要在项目中添加相应的依赖。在Maven的`pom.xml`文件中,我们需要引入Spring ...

    基于spring boot,集成了RPC、缓存、消息队列、分库分表、注册-spring-boot-bulking.zip

    通过Spring Cache抽象层,开发者可以轻松地将缓存集成到应用中,使用注解来标记需缓存的方法。 3. **消息队列**:消息队列如RabbitMQ或Kafka,用于解耦服务和异步处理。Spring Boot 提供了与这些消息队列的集成,...

    Spring Boot框架集成Redis教程.doc版

    3. **配置 Cache**:Spring Boot 提供了 `@EnableCaching` 注解来启用缓存支持。你可以创建一个配置类,如 `RedisConfig`,并实现自定义的 `KeyGenerator` 和 `CacheManager`,以确保缓存键的唯一性和自定义缓存管理...

    Spring Boot 整合 Spring-cache:让你的网站速度飞起来.docx

    Spring Cache 是 Spring 框架的一个模块,自 3.1 版本起引入,提供了基于注解的缓存抽象,使得开发者能够方便地在应用中集成和管理缓存。 一、Spring Cache 介绍 Spring Cache 提供了一种统一的方式来管理不同类型...

    Spring boot视频

    - **缓存策略**:使用 Spring Cache 或 Ehcache 等技术提高数据访问效率。 - **异步处理**:使用 `@Async` 实现异步任务处理,提高系统响应速度。 - **日志管理**:合理配置日志级别和日志框架(如 Logback),便于...

    Spring Boot 学习笔记完整教程.docx

    15. **Spring Boot 集成 JSP** - **配置 JSP**:在 Spring Boot 中启用对 JSP 的支持,设置视图解析器,理解 `addResourceHandlers` 和 `addViewControllers` 方法。 这个教程不仅适合初学者,也适合有一定经验的...

Global site tag (gtag.js) - Google Analytics