博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringCloud+MyBatis+Redis整合—— 超详细实例(二)
阅读量:5298 次
发布时间:2019-06-14

本文共 4406 字,大约阅读时间需要 14 分钟。

2、SpringCloud+MyBatis+Redis

  redis是一种nosql数据库,以键值对<key,value>的形式存储数据,其速度相比于MySQL之类的数据库,相当于内存读写与硬盘读写的差别,所以常常用作缓存,用于少写多读的场景下,直接从缓存拿数据比从数据库(数据库要I/O操作)拿要快得多。

  话不多说,接下来紧接上一章搭建SpringCloud+MyBatis+Redis环境:

  • 第一步:在pom.xml文件中添加
1       
2
3
org.springframework.boot
4
spring-boot-starter-data-redis
5
6
  • 第二步:下载Windows版Redis  

打开一个 cmd 窗口 使用cd命令切换目录到  F:\dev-space\workspaces\newPlatform-2018\RedisForWindow  运行 redis-server.exe redis.windows.conf 。(放文件的实际路径)

  • 第三步:创建RedisConfig配置类,相当于在xml文件中的bean
1 @Configuration② 2 @EnableCaching③ 3 public class RedisConfig extends CachingConfigurerSupport { 4  5     @Bean 6     public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { 7         RedisCacheManager rm = new RedisCacheManager(redisTemplate); 8         rm.setDefaultExpiration(30l);// 设置缓存时间 9         return rm;10     }11 12     @Bean13     public RedisTemplate
redisTemplate(RedisConnectionFactory factory) {14 StringRedisTemplate template = new StringRedisTemplate(factory);15 @SuppressWarnings({ "rawtypes", "unchecked" })16 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);17 ObjectMapper om = new ObjectMapper();18 om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);19 om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);20 jackson2JsonRedisSerializer.setObjectMapper(om);21 template.setValueSerializer(jackson2JsonRedisSerializer);22 template.afterPropertiesSet();23 return template;24 }25 // @Bean26 // public JedisConnectionFactory redisConnectionFactory() { 27 // JedisConnectionFactory factory = new JedisConnectionFactory(); 28 // factory.setHostName(host); 29 // factory.setPort(port); 30 // factory.setPassword(password); 31 // factory.setTimeout(timeout); //设置连接超时时间 32 // return factory; 33 // }    不配置端口默认为637934 }

 

  • 第四步:改造controller类,新增Service类让方法拥有Redis缓存
1 @Service 2 public class UserService { 3     @Autowired 4     private UserMapper userMapper; 5      6     @Cacheable(value="user", key="'user'")④ 7     public User selectByPrimaryKey(Integer id) { 8         System.out.println("开始查询....."); 9         try {10             Thread.sleep(3 * 1000l);11         } catch (InterruptedException e) {12             e.printStackTrace();13         }14         System.out.println("查询结束......");15         User user=userMapper.selectByPrimaryKey(id);16 17         return user;18     }19     20 }
1 @RestController 2 public class HelloController { 3     @Autowired 4     private UserService userService; 5      6     @RequestMapping("/hello") 7     public String index() { 8         long beginTime=System.currentTimeMillis(); 9         User  user = userService.selectByPrimaryKey(1);10         long time=System.currentTimeMillis()-beginTime;11         return "Hello SpringBoot"+user.getName()+",消耗查询时间:"+time;12         13     }14     15     16 }

 

  • 第五步:在页面输入http://127.0.0.1:1111/hello,第一次可以看到通过查询并延迟三秒

当第二次输入后,该查询会从Redis缓存中获取,所以时间没有延迟三秒,并且非常迅速

从cmd中  该目录下输入 redis-cli       get user得到:

说明该对象以存入Redis缓存当中。

至此,SpringCloud+MyBats+Redis搭建成功!

项目完整代码见

 


注释一:Redis:属于独立的运行程序,需要单独安装后,使用Java中的Jedis来操纵。因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的。

    ehcache:与Redis明显不同,它与java程序是绑在一起的,java程序活着,它就活着。譬如,写一个独立程序放数据,再写一个独立程序拿数据,那么是拿不到数据的。只能在独立程序中才能拿到数据。

注释二:从Spring3.x开始提供了Java配置方式,使用Java配置方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java配置的方式。

Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:

1、@Configuration 作用于类上,相当于一个xml配置文件;

2、@Bean 作用于方法上,相当于xml配置中的<bean>;

注释三:@EnableCaching注解是spring framework中的注解驱动的缓存管理功能。自spring版本3.1起加入了该注解。

当你在配置类(@Configuration)上使用@EnableCaching注解时,会触发一个post processor,这会扫描每一个spring bean,查看是否已经存在注解对应的缓存。如果找到了,就会自动创建一个代理拦截方法调用,使用缓存的bean执行处理,等同于XML文件中配置<cache:annotation-driven/>。

注释四:@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从缓存中获取结果,而不需要再次执行该方法。另外这里运用到了springBoot的自动配置原理。springBoot默认是以ConcurrentHashMap作为底层存储数据结构,当引入redis启动器后,它的自动配置会扫描到redis的存在,从将CacheManager实现类改为使用redis实现。这就是springBoot“开箱即用”的关键所在,根据当前项目环境,做出最合适的配置。

 

转载于:https://www.cnblogs.com/king-brook/p/9487078.html

你可能感兴趣的文章
sql语句中where与having的区别
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
Linux 中【./】和【/】和【.】之间有什么区别?
查看>>
内存地址对齐
查看>>
看门狗 (监控芯片)
查看>>
#ifndef #define #endif
查看>>
css背景样式
查看>>
JavaScript介绍
查看>>
正则表达式
查看>>
开源网络漏洞扫描软件
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
C语言中求最大最小值的库函数
查看>>
和小哥哥一起刷洛谷(1)
查看>>
jquery对id中含有特殊字符的转义处理
查看>>