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

话不多说,接下来紧接上一章《SpringCloud+MyBatis+Redis整合—— 超详细实例(一)》搭建SpringCloud+MyBatis+Redis环境:
- 第一步:在pom.xml文件中添加
<!-- Redis缓存整合开始 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- Redis缓存整合结束 -->
- 第二步:下载Windows版Redis https://github.com/MSOpenTech/redis/releases

打开一个 cmd 窗口 使用cd命令切换目录到 F:\dev-space\workspaces\newPlatform-2018\RedisForWindow 运行 redis-server.exe redis.windows.conf 。(放文件的实际路径)
- 第三步:创建RedisConfig配置类,相当于在xml文件中的bean
@Configuration②
@EnableCaching③
public class RedisConfig extends CachingConfigurerSupport { @Bean
public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
RedisCacheManager rm = new RedisCacheManager(redisTemplate);
rm.setDefaultExpiration(30l);// 设置缓存时间
return rm;
} @Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
StringRedisTemplate template = new StringRedisTemplate(factory);
@SuppressWarnings({ "rawtypes", "unchecked" })
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
// @Bean
// public JedisConnectionFactory redisConnectionFactory() {
// JedisConnectionFactory factory = new JedisConnectionFactory();
// factory.setHostName(host);
// factory.setPort(port);
// factory.setPassword(password);
// factory.setTimeout(timeout); //设置连接超时时间
// return factory;
// } 不配置端口默认为6379
}
- 第四步:改造controller类,新增Service类让方法拥有Redis缓存
@Service
public class UserService {
@Autowired
private UserMapper userMapper; @Cacheable(value="user", key="'user'")④
public User selectByPrimaryKey(Integer id) {
System.out.println("开始查询.....");
try {
Thread.sleep(3 * 1000l);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("查询结束......");
User user=userMapper.selectByPrimaryKey(id); return user;
} }
@RestController
public class HelloController {
@Autowired
private UserService userService; @RequestMapping("/hello")
public String index() {
long beginTime=System.currentTimeMillis();
User user = userService.selectByPrimaryKey(1);
long time=System.currentTimeMillis()-beginTime;
return "Hello SpringBoot"+user.getName()+",消耗查询时间:"+time; } }
- 第五步:在页面输入http://127.0.0.1:1111/hello,第一次可以看到通过查询并延迟三秒

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

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

说明该对象以存入Redis缓存当中。
至此,SpringCloud+MyBats+Redis搭建成功!
项目完整代码见https://github.com/Adosker/hello
注释一: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“开箱即用”的关键所在,根据当前项目环境,做出最合适的配置。
SpringCloud+MyBatis+Redis整合—— 超详细实例(二)的更多相关文章
- SpringCloud+MyBatis+Redis整合—— 超详细实例(一)
1.SpringCloud+MyBatis MyBatis 是一款优秀的轻量级半自动持久层框架,与之相对应的还有hibernate框架.① 话不多说,接下来搭建SpringCloud+MyBati ...
- Struts2+Spring4+Hibernate4整合超详细教程
Struts2.Spring4.Hibernate4整合 超详细教程 Struts2.Spring4.Hibernate4整合实例-下载 项目目的: 整合使用最新版本的三大框架(即Struts2.Sp ...
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
为了更好的排版, 所以将IK分词器的安装重启了一篇博文, 大家可以接上solr的安装一同查看.[Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一: http://ww ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(二)Log4j讲解与整合
日常啰嗦 上一篇文章主要讲述了一下syso和Log间的一些区别与比较,重点是在项目的日志功能上,因此,承接前文<Spring+SpringMVC+MyBatis+easyUI整合优化篇(一)Sy ...
- ssh框架整合---- spring 4.0 + struts 2.3.16 + maven ss整合超简单实例
一 . 需求 学了这么久的ssh,一直都是别人整合好的框架去写代码,自己实际动手时才发现框架配置真是很坑爹,一不小心就踏错,真是纸上得来终觉浅! 本文将记录整合struts + spring的过程 , ...
- Spring+SpringMVC+MyBatis+easyUI整合基础篇(二)牛刀小试
承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. github地址为ssm-demo 你也可以先体验一下实际效果,点击这里就行啦 账号:admin 密码:1 ...
- SpringBoot + Mybatis + Redis 整合入门项目
这篇文章我决定一改以往的风格,以幽默风趣的故事博文来介绍如何整合 SpringBoot.Mybatis.Redis. 很久很久以前,森林里有一只可爱的小青蛙,他迈着沉重的步伐走向了找工作的道路,结果发 ...
- 7.springboot+mybatis+redis整合
选择生成的依赖 选择保存的工程路径 查询已经生成的依赖,并修改mysql的版本 <dependencies> <dependency> <groupId>org.s ...
- Spring、SpringMVC、Hibernate整合 ----超详细教程
一.数据库表 /* Navicat MySQL Data Transfer Source Server : 本地连接 Source Server Version : 50720 Source Host ...
随机推荐
- 选带傅里叶变换(zoom-fft)
选带傅里叶变换的原理大家能够看书.大致的步骤为 移频 (将选带的中心频率移动到零频) 数字低通滤波器 (防止频率混叠) 又一次採样 (将採样的数据再次间隔採样,间隔的数据取决于分析的带宽,就是放大 ...
- (void __user *)arg 中__user的作用
__user宏简单告诉编译器(通过 noderef)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的). (void __user *)arg 指的是arg值是一个用户空间的地址,不能直接 ...
- MySQL基础笔记(五) 视图
一.什么是视图 视图是一个虚拟表.也就是说,视图在外观和行为上都类似于表,但它不需要实际的物理存储,只保存了视图定义(查询语句). 视图由select查询所定义 -- 当创建一个视图时,实际上是在数据 ...
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
Visual Studio 2017中使用正则修改部分内容 最近在项目中想实现一个小工具,需要根据类的属性<summary>的内容加上相应的[Description]特性,需要实现的效 ...
- 【iOS系列】-UITableViewCell的展开与收缩的实现思路
UITableViewCell的展开与收缩的实现思路 现在项目中很多地方都会用到,所以我这里介绍一种可以复用的思路,这与文章后面的Swift的实现思路不同,具体大家可自行对比. Demo项目地址 开始 ...
- 【iOS系列】-xib封装使用
[iOS系列]-xib封装使用 Xib文件可以用来描述某一块局部的UI界面 Xib文件的加载 修改xib文件的大小size(Freeform) 第一: NSArray *objs = [[NSBund ...
- 使用scanf_s报错:0xC0000005: Access violation writing location 0x00000000
在vs2010中写了一行scanf("%s",name); 调式时 提示warning , 提示修改为scanf()使用可能会存在不安全,建议使用scanf_s() 但是我修改成s ...
- stl之vector的应用
这里主要是对vector容器的一些常见应用的总结.至于vector的构造函数及初始化能够參考http://blog.csdn.net/lsh_2013/article/details/21191289 ...
- PR 修改保存的增强 ME_UPDATE_REQUISITION
FUNCTION me_update_requisition."""""""""""&qu ...
- C#6.0 新功能
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...