Spring Cache整合Redis实现方法详解

 更新时间:2020年08月17日 10:36:06   作者:柒丶月  
这篇文章主要介绍了Spring Cache整合Redis实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

导入依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

基本配置

spring.redis.port=6380
spring.redis.host=192.168.66.128

spring.cache.cache-names=c1 //给缓存取了一个名字

在启动类上添加注解,表示开启缓存

完成了这些配置之后,Spring Boot就会自动帮

@SpringBootApplication
@EnableCaching
public class RediscacheApplication {

 public static void main(String[] args) {
  SpringApplication.run(RediscacheApplication.class, args);
 }

}

我们在后台配置一个RedisCacheManager,相关的配置是在org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration类中完成的。部分源码如下:

@Configuration
@ConditionalOnClass(RedisConnectionFactory.class)
@AutoConfigureAfter(RedisAutoConfiguration.class)
@ConditionalOnBean(RedisConnectionFactory.class)
@ConditionalOnMissingBean(CacheManager.class)
@Conditional(CacheCondition.class)
class RedisCacheConfiguration {

	@Bean
	public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory,
			ResourceLoader resourceLoader) {
		RedisCacheManagerBuilder builder = RedisCacheManager
				.builder(redisConnectionFactory)
				.cacheDefaults(determineConfiguration(resourceLoader.getClassLoader()));
		List<String> cacheNames = this.cacheProperties.getCacheNames();
		if (!cacheNames.isEmpty()) {
			builder.initialCacheNames(new LinkedHashSet<>(cacheNames));
		}
		return this.customizerInvoker.customize(builder.build());
	}
}

系统会自动提供一个RedisCacheManger的Bean,RedisCacheManager间接实现了Spring中的Cache接口,有了这个Bean,我们就可以直接使用Spring中的缓存注解和接口了,而缓存数据则会被自动存储到Redis上。

在单机的Redis中,这个Bean系统会自动提供,如果是Redis集群,这个Bean需要开发者来提供

缓存使用@CachaConfig

这个注解在类上使用,用来描述该类中所有方法使用的缓存名称,当然也可以不使用该注解,直接在具体的缓存注解上配置名称,示例代码如下:

@Service
@CacheConfig(cacheNames = "c1")
public class UserService {
}

@Cacheable

这个注解一般加载查询方法上,表示将一个方法的返回值缓存起来,默认情况下,缓存的key就是方法的参数,缓存的value就是方法的返回值,示例代码如下:

@Cacheable(key = "#id")
public User getUserById(Integer id,String username) {
 System.out.println("getUserById");
 return getUserFromDBById(id);
}

当有多个参数时,默认就使用多个参数来做key,如果只需要其中某一个参数做key,则可以在@Cacheable注解中,通过key属性来指定key,如上代码就表示只使用id作为缓存的key,如果对key有复杂的要求,可以自定义keyGenerator。当然,Spring Cache中提供了root对象,可以在不定义keyGenerator的情况下实现一些复杂的效果:

@CachePut

这个注解一般加在更新方法上,当数据库中的数据更新后,缓存中的数据也要跟着更新,使用该注解,可以将方法的返回值自动更新到已经存在的key上,示例代码如下:

@CachePut(key = "#user.id")
public User updateUserById(User user) {
 return user;
}

@CacheEvict

这个注解一般加在删除方法上,当数据库中的数据删除后,相关的缓存数据也要自动清除,该注解在使用的时候也可以配置按照某种条件删除(condition属性)或者或者配置清除所有缓存(allEntries属性),示例代码如下:

@CacheEvict()
public void deleteUserById(Integer id) {
 //在这里执行删除操作, 删除是去数据库中删除
}

总结

在SpringBoot中,使用Redis缓存,既可以使用RedisTemplate自己来实现,也可以使用使用这种方式,这种方式是Spring
Cache提供的统一接口,实现既可以是Redis,也可以是Ehcache或者其他支持这种规范的缓存框架。从这个角度来说,SpringCache和Redis、Ehcache的关系就像JDBC与各种数据库驱动的关系。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • java使用apache.poi导出word文件的示例代码

    java使用apache.poi导出word文件的示例代码

    这篇文章主要介绍了java使用apache.poi导出word文件,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • SpringBoot配置文件中敏感信息加密的三种方法

    SpringBoot配置文件中敏感信息加密的三种方法

    当我们将项目部署到服务器上时,一般会在jar包的同级目录下加上application.yml配置文件,这样可以在不重新换包的情况下修改配置,这种方式存在安全隐患,如果配置文件泄露,就会造成数据库密码泄露,所以本文给大家介绍了SpringBoot配置文件中敏感信息加密的三种方法
    2024-05-05
  • Maven搭建springboot项目的方法步骤

    Maven搭建springboot项目的方法步骤

    这篇文章主要介绍了Maven搭建springboot项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 浅析java实现数据加密问题

    浅析java实现数据加密问题

    本文通过实例代码给大家介绍了java实现数据加密问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • Spring Cloud微服务使用webSocket的方法

    Spring Cloud微服务使用webSocket的方法

    WebSocket在现代浏览器中的应用已经算是比较普遍了,在某些业务场景下,要求必须能够在服务器端推送消息至客户端,本文给大家介绍Spring Cloud微服务使用webSocket的方法,感兴趣的朋友一起看看吧
    2021-06-06
  • Java实现简单通讯录管理系统

    Java实现简单通讯录管理系统

    这篇文章主要为大家详细介绍了Java实现简单通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • java通过itext生成pdf的干货教程

    java通过itext生成pdf的干货教程

    这篇文章主要介绍了java通过itext生成pdf的相关资料,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下
    2022-06-06
  • Java虚拟机最多支持多少个线程的探讨

    Java虚拟机最多支持多少个线程的探讨

    这篇文章主要介绍了Java虚拟机最多支持多少个线程的问题,从StackOverflow上摘录而来,需要的朋友可以参考下
    2014-04-04
  • JAVA8 List<List<Integer>> list中再装一个list转成一个list操作

    JAVA8 List<List<Integer>> list中再装一个list转成一个list操

    这篇文章主要介绍了JAVA8 List<List<Integer>> list中再装一个list转成一个list操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 一招教你使用Java执行groovy脚本的两种方式

    一招教你使用Java执行groovy脚本的两种方式

    本文主要介绍了一招教你使用Java执行groovy脚本的两种方式,一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容,一种是执行groovy脚本,感兴趣的可以了解一下
    2023-09-09

最新评论