抽丝剥茧 细说架构那些事——【优锐课】
你的Spring应用程序正在运行吗?好吧,你最好去缓存它!
Spring是Java编程语言的一种非常流行的应用程序框架,它使构建企业Java软件更加容易。从3.1版开始,Spring支持将缓存添加到现有的Spring应用程序中,以提高性能并减少响应时间。
Redis是一种开源的内存中数据结构存储,可用于构建NoSQL数据库。但是,Redis不包括对Java的常规支持或对Spring等应用程序框架的支持。
好消息是,你可以使用第三方Redis Java客户端(例如Redisson)来使用Spring和Redis进行缓存。Redisson与Spring框架完全兼容。在本文中,优锐课将讨论如何在Redis中使用Redisson进行缓存。
在Spring中缓存
Spring框架提供了一个缓存抽象层。在Spring中进行缓存的相关注释如下:
• @Cacheable:@Cacheable批注表示调用此方法的结果将被缓存。 如果再次使用相同的参数调用该方法,则将从缓存中检索结果,而不是调用该方法。
• @CachePut:@CachePut批注表示方法将触发缓存放置操作。
• @CacheEvict:@CacheEvict批注表示方法将触发缓存逐出操作。
• @EnableCaching:@EnableCaching批注启用Spring的内置缓存管理功能。
• @Caching:@Caching注释是用于多个缓存注释的组注释。
• @CacheConfig:@CacheConfig批注允许共享与缓存相关的常见设置,例如缓存名称和密钥生成器。
安装Redisson
安装Redisson非常简单。例如,如果你使用的是Maven,只需将以下依赖项添加到pom.xml文件中:
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.11.5</version>
</dependency>
Redisson中的缓存参数
Redisson中的每个Spring缓存都有两个重要的参数,以毫秒为单位指定:
• ttl:ttl(生存时间)参数确定高速缓存中对象的最大生存期。 缓存中的所有对象的生存时间到期后,无论请求的频率如何,都将删除它们。
• maxIdleTime:maxIdleTime参数确定两次请求对象之间可以经过的最长时间。如果这段时间没有请求,对象将从缓存中自动删除。此参数仅在Spring缓存的Redisson实现中存在。
如果这两个参数未定义或等于0,则将无限期存储高速缓存中的对象。
使用Spring和Redis进行缓存的示例代码
以下示例代码演示了如何使用Redisson在Spring和Redis中执行缓存。该代码利用了两个Spring bean:第一个用于创建和配置Redisson客户端,第二个用于设置和测试缓存。
@Configuration
@ComponentScan
@EnableCaching
public class Application {
@Bean(destroyMethod="shutdown")
RedissonClient redisson() {
Config config = new Config();
config.useSingleServer()
.setAddress("redis://127.0.0.1:6379");
return Redisson.create(config);
}
@Bean
CacheManager cacheManager(RedissonClient redissonClient) {
Map<String, CacheConfig> config = new HashMap<>();
// create "testMap" spring cache with ttl = 24 minutes and maxIdleTime = 12 minutes
config.put("testMap", new CacheConfig(24*60*1000, 12*60*1000));
return new RedissonSpringCacheManager(redissonClient, config);
}
}
结论
借助本地缓存的功能,Redisson允许你将基于Redis的Spring缓存的性能提高多达45倍,以进行读取操作。
加入Java学习资料交流qq群:907135806和我们一起探讨吧!有想要JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java学习资料、视频课程和学习路线的童鞋也可以加vx:ddmsiqi 领取啦,共同进步~