Spring教程  ->  @EnableCaching集成redis缓存
1、Spring是什么?我们为什么要学习它?
2、控制反转(IoC)与依赖注入(DI)
3、Spring容器基本使用及原理
4、xml中bean定义详解
5、容器创建bean实例有多少种?
6、bean作用域scope详解
7、依赖注入之手动注入
8、依赖注入之自动注入(autowire)详解
9、depend-on干什么的?
10、primary可以解决什么问题?
11、bean中的autowire-candidate属性又是干什么的?
12、lazy-init:bean延迟初始化
13、使用继承简化bean配置(abstract & parent)
14、lookup-method和replaced-method比较陌生,怎么玩的?
15、代理详解(java动态代理&CGLIB代理)
16、深入理解java注解(预备知识)
17、@Configration、@Bean注解详解
18、@ComponentScan、@ComponentScans详解
19、@Import 注解详解
20、@Conditional通过条件来控制bean的注册
21、注解实现依赖注入(@Autowired、@Resource、@Primary、@Qulifier)
22、@Scope、@DependsOn、@ImportResource、@Lazy
23、Bean生命周期详解
24、父子容器
25、@PropertySource、@Value注解及动态刷新实现
26、国际化详解
27、事件详解
28、循环bean详解
29、BeanFactory扩展(BeanFactoryPostProcessor、BeanDefinitionRegistryPostProcessor)
30、jdk动态代理和cglib代理
31、Aop概念详解
32、AOP核心源码、原理详解
33、ProxyFactoryBean创建AOP代理
34、@Aspect中@Pointcut 12种用法
35、@Aspect中5中通知详解
36、@EnableAspectJAutoProxy、@Aspect中通知顺序详解
37、@EnableAsync & @Async 实现方法异步调用
38、@Scheduled & @EnableScheduling定时器详解
39、强大的Spel表达式
40、缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)
41、@EnableCaching集成redis缓存
42、JdbcTemplate实现增删改查如此简单?
43、Spring中编程式事务怎么用的?
44、Spring声明事务怎么用的?
45、详解Spring事务中7种传播行为
46、Spring如何管理多数据源事务?
47、Spring事务源码解析
48、@Transaction 事务源码解析
49、实战篇:手把手带你实现事务消息!
50、Spring事务拦截器顺序如何控制?
51、Spring事务失效常见的几种情况
52、Spring实现数据库读写分离
53、Spring集成MyBatis
54、集成junit
55、Spring上下文生命周期
56、面试官:循环依赖不用三级缓存可以么?
57、Spring常用工具类
上一篇:缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)
下一篇:JdbcTemplate实现增删改查如此简单?

上篇文章主要介绍了spring中缓存的使用,不过文中的案例都是以本地内存作为存储介质的,但是实际上我们的项目上线之后,基本上都会采用集群的方式进行部署,如果将数据存储在本地内存中,集群之间是无法共享的,我们可以将数据存储在redis中,从而实现缓存的共享,下面我们一起来看下Spring中@EnableCaching如何对接redis

安装redis

  1. 下载地址:https://redis.io/download

pom.xml中引入redis配置

  1. <dependency>
  2. <groupId>org.redisson</groupId>
  3. <artifactId>redisson</artifactId>
  4. <version>3.13.3</version>
  5. </dependency>

项目中创建redis配置文件

新建com/javacode2018/cache/demo2/redis.yml,内容如下:

  1. singleServerConfig:
  2. address: "redis://127.0.0.1:6379"
  3. password: null
  4. clientName: null
  5. database: 7 #选择使用哪个数据库0~15
  6. idleConnectionTimeout: 10000
  7. connectTimeout: 10000
  8. timeout: 3000
  9. codec:
  10. class: "org.redisson.codec.JsonJacksonCodec"

创建redis相关的bean

  1. package com.javacode2018.cache.demo2;
  2. import org.redisson.Redisson;
  3. import org.redisson.api.RedissonClient;
  4. import org.redisson.config.Config;
  5. import org.redisson.spring.cache.RedissonSpringCacheManager;
  6. import org.springframework.cache.CacheManager;
  7. import org.springframework.cache.annotation.EnableCaching;
  8. import org.springframework.context.annotation.Bean;
  9. import org.springframework.context.annotation.ComponentScan;
  10. import java.io.IOException;
  11. import java.io.InputStream;
  12. import java.util.Arrays;
  13. @ComponentScan
  14. @EnableCaching //@1
  15. public class MainConfig2 {
  16. @Bean //@2
  17. public CacheManager cacheManager() throws IOException {
  18. RedissonSpringCacheManager cacheManager = new RedissonSpringCacheManager(this.redissonClient());
  19. cacheManager.setCacheNames(Arrays.asList("cache1"));
  20. return cacheManager;
  21. }
  22. @Bean //@3
  23. public RedissonClient redissonClient() throws IOException {
  24. InputStream is = MainConfig2.class.getResourceAsStream("/com/javacode2018/cache/demo2/redis.yml");
  25. Config config = Config.fromYAML(is);
  26. return Redisson.create(config);
  27. }
  28. }

@1:开启spring cache功能。

@2:自定义spring中cache管理器,这个地方我们定义了一个redis类型的管理器,底层使用redis来作为缓存的存储介质。

@3:通过redis.yml配置文件来创建一个RedissonClient,用于和redis进行交互。

来个测试类

  1. package com.javacode2018.cache.demo2;
  2. import org.springframework.cache.annotation.Cacheable;
  3. import org.springframework.stereotype.Component;
  4. import java.util.Arrays;
  5. import java.util.List;
  6. @Component
  7. public class BookService {
  8. @Cacheable(cacheNames = "cache1", key = "#root.targetClass.name+'-'+#root.method.name")
  9. public List<String> list() {
  10. System.out.println("---模拟从db中获取数据---");
  11. return Arrays.asList("java高并发", "springboot", "springcloud");
  12. }
  13. }

测试用例

  1. @Test
  2. public void test7() {
  3. AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MainConfig2.class);
  4. BookService bookService = context.getBean(BookService.class);
  5. System.out.println(bookService.list());
  6. System.out.println(bookService.list());
  7. {
  8. System.out.println("下面打印出cache1缓存中的key列表");
  9. RedissonSpringCacheManager cacheManager = context.getBean(RedissonSpringCacheManager.class);
  10. RedissonCache cache1 = (RedissonCache) cacheManager.getCache("cache1");
  11. cache1.getNativeCache().keySet().stream().forEach(System.out::println);
  12. }
  13. }

运行输出

  1. ---模拟从db中获取数据---
  2. [java高并发, springboot, springcloud]
  3. [java高并发, springboot, springcloud]
  4. 下面打印出cache1缓存中的key列表
  5. com.javacode2018.cache.demo2.BookService-list

此时数据已经进入redis了,我们用redis客户端工具RedisDesktopManager来看一下。

RedisDesktopManager下载地址

  1. 链接:https://pan.baidu.com/s/1WCd-tk8dDDJnFIKciVIQsA
  2. 提取码:x728

解压之后,点击下面的直接运行

案例源码

  1. https://gitee.com/javacode2018/spring-series

本博客所有系列案例代码以后都会放到这个上面,大家watch一下,可以持续关注动态。

继续收门徒,亲手带,月薪 4W 以下的可以来找我

最新资料

  1. 尚硅谷 Java 学科全套教程(总 207.77GB)
  2. 2021 最新版 Java 微服务学习线路图 + 视频
  3. 阿里技术大佬整理的《Spring 学习笔记.pdf》
  4. 阿里大佬的《MySQL 学习笔记高清.pdf》
  5. 2021 版 java 高并发常见面试题汇总.pdf
  6. Idea 快捷键大全.pdf